ASP.NET の承認
更新 : 2007 年 11 月
ID に対して特定のリソースへのアクセス権を付与するかどうかは、承認によって決まります。ASP.NET では、特定のリソースへのアクセスを承認する方法には次の 2 種類があります。
ファイルの承認 ファイルの承認は FileAuthorizationModule によって実行されます。.aspx ハンドラ ファイルまたは .asmx ハンドラ ファイルのアクセス制御リスト (ACL) をチェックし、ユーザーがファイルへのアクセス権を持っているかどうかを判断します。ACL アクセス許可は、ユーザーの Windows ID に対して (Windows 認証が有効な場合)、または ASP.NET プロセスの Windows ID に対して検証されます。詳細については、「ASP.NET の偽装」を参照してください。
URL の承認 URL の承認は UrlAuthorizationModule によって実行されます。これによって、ASP.NET アプリケーションの URL にユーザーおよびロールが割り当てられます。このモジュールを使用すると、特定のユーザーやロールについて、アプリケーションの一部 (通常はディレクトリ) へのアクセスを選択的に許可したり拒否したりできます。
URL の承認の使用
URL の承認では、ユーザー名やロールごとに特定のディレクトリへのアクセスを明示的に許可したり拒否したりできます。これを行うには、目的のディレクトリの構成ファイル内に authorization セクションを作成します。URL の承認を有効にするには、構成ファイルの authorization セクションの allow 要素または deny 要素に、ユーザーまたはロールのリストを指定します。ディレクトリに対して確立したアクセス許可は、そのサブディレクトリ内の構成ファイルでオーバーライドされない限り、サブディレクトリにも適用されます。
authorization セクションの構文を次に示します。
<authorization>
<[allow|deny] usersrolesverbs />
</authorization>
allow 要素または deny 要素は必須です。users 属性または roles 属性のどちらかを指定する必要があります。両方を含めることもできますが、それは必須ではありません。verbs 属性は省略できます。
allow 要素はアクセス権を付与し、deny 要素はアクセス権を取り消します。どちらの要素も、次の表に示す属性をサポートします。
属性 |
説明 |
---|---|
users |
この要素の対象とする ID (ユーザー アカウント) を識別します。 匿名ユーザーは疑問符 (?) を使用して識別されます。アスタリスク (*) を使用して、すべての認証済みユーザーを指定できます。 |
roles |
リソースへのアクセスを許可または拒否された、現在の要求のロール (RolePrincipal オブジェクト) を識別します。詳細については、「ロールを使用した承認の管理」を参照してください。 |
verbs |
GET、HEAD、POST など、アクションが適用される HTTP 動詞を定義します。既定値は "*" で、すべての動詞を指定します。 |
次の例では、ID Kim と Admins ロールのメンバにアクセス権を付与し、ID John (ID John が Admins ロールに含まれている場合を除く) とすべての匿名ユーザーに対してはアクセスを拒否します。
<authorization>
<allow users="Kim"/>
<allow roles="Admins"/>
<deny users="John"/>
<deny users="?"/>
</authorization>
次の authorization セクションは、ID John に対してアクセスを許可し、他のすべてのユーザーに対してアクセスを拒否する方法を示します。
<authorization>
<allow users="John"/>
<deny users="*"/>
</authorization>
次の例に示すように、コンマ区切りのリストを使用して、users 属性と roles 属性の両方に複数のエンティティを指定できます。
<allow users="John, Kim, contoso\Jane"/>
ドメインのアカウント名を指定する場合は、contoso\Jane のように、名前にドメイン名とユーザー名の両方を含める必要があります。
次の例では、すべてのユーザーがリソースに対して HTTP GET を実行できますが、POST 操作を実行できるのは ID Kim だけです。
<authorization>
<allow verbs="GET" users="*"/>
<allow verbs="POST" users="Kim"/>
<deny verbs="POST" users="*"/>
</authorization>
適用される規則の優先順位
アプリケーション レベルの構成ファイルに含まれている規則は、継承される規則に優先します。どの規則を優先するかは、ある URL に対する全規則を最も新しい (階層構造内で最も近い) 規則が先頭に来るようにマージしたリストを生成することによって、システムが決定します。
あるアプリケーションに対する規則のマージ済みリストが存在する場合、ASP.NET は一致する規則が最初に見つかるまでリストの先頭から規則をチェックしていきます。ASP.NET の既定の構成には <allow users="*"> 要素が含まれています。この要素はすべてのユーザーを承認します (既定では、この規則は最後に適用されます)。一致する承認規則が他にない場合、要求は許可されます。deny 要素の一致が見つかった場合は、要求はステータス コード 401 HTTP で返されます。allow 要素の一致が見つかった場合は、要求は続けて処理されます。
構成ファイルに location 要素を作成し、location 要素の設定を適用する特定のファイルやディレクトリを指定することもできます。