次の方法で共有


ASP.NET の認定

認定の目的は、ある ID に対して特定のリソースへの要求された種類のアクセス権を与えるかどうかを判断することです。特定のリソースへのアクセスを認定する基本方法には、次の 2 種類があります。

  • ファイル認定

    ファイル認定は FileAuthorizationModule によって実行され、Windows 認証を使用した場合に有効になります。.aspx ハンドラ ファイルまたは .asmx ハンドラ ファイルのアクセス制御リスト (ACL) をチェックし、ユーザーがアクセス権を持っているかどうかを判断します。アプリケーションでは、さらに偽装を使用して、アクセスするリソースについてリソース チェックも実行できます。偽装の詳細については、「ASP.NET の偽装」を参照してください。

  • URL 認定

    URL 認定は、ユーザーとロールを URL 名前空間の一部に割り当てる URLAuthorizationModule によって実行されます。このモジュールは、肯定的および否定的な認定アサーションの両方を実装します。つまり、このモジュールを使用すると、特定のセット、ユーザー、またはロールに対して、URL 名前空間の任意の部分へのアクセスを選択的に許可または拒否できます。

URLAuthorizationModule は、いつでも使用できます。使用するには、構成ファイルの <authorization> セクションの <allow> 要素または <deny> 要素に、ユーザーまたはロール、あるいはその両方のリストを指定します。

特定のディレクトリにアクセスするための条件を設定するには、<authorization> セクションを含んだ構成ファイルをそのディレクトリに配置する必要があります。ディレクトリに対して設定した条件は、そのサブディレクトリ内の構成ファイルでオーバーライドされない限り、サブディレクトリにも適用されます。このセクションの一般的な構文は次のとおりです。

<[element] [users] [roles] [verbs]/>

element は必須です。users 属性または roles 属性は、少なくともいずれか一方を含める必要があります。両方を含めることもできますが、それは必須ではありません。verbs 属性はオプションです。

この他に、アクセス権を付与する <allow> 要素と、アクセス権を拒否する <deny> 要素を含めることができます。各要素は 3 つの属性をサポートします。それらの定義を次の表に示します。

属性 説明
roles この要素の対象とするロールを識別します。要求に関連付けられている IPrincipal オブジェクトがロールのメンバシップを決定します。特定の要求のコンテキストに任意の IPrincipal オブジェクトを関連付けることができ、このオブジェクトによって任意の方法でロールのメンバシップを決定できます。たとえば、既定の WindowsPrincipal クラスは、Microsoft Windows NT のグループを使用してロールのメンバシップを決定します。
users この要素の対象とする ID を識別します。
verbs GETHEADPOST など、アクションが適用される HTTP 動詞を定義します。

匿名ユーザーも拒否されます。

Kim と Admins ロールのメンバにアクセス権を付与し、John とすべての匿名ユーザーにアクセス権を拒否する例を次に示します。

<authorization>
    <allow users="Kim"/>
    <allow roles="Admins"/>
    <deny users="John"/>
    <deny users="?"/>
</authorization>

users および roles では、次に示すようなコンマ区切りのリストを使用することで、複数のエンティティを指定できます。

<allow users="John, Kim, contoso\Jane"/>

ドメイン アカウント (contoso\Jane) には、ドメイン名とユーザー名を両方とも組み合わせて含める必要があります。

ID には、名前の他に、次の表に示すような 2 つの特別な ID も指定できます。

ID 説明
* すべての ID を示します。
? 匿名 ID を示します。

John だけに許可を与え、それ以外のすべてのユーザーを拒否するには、たとえば次のような構成セクションを作成します。

<authorization>
    <allow users="John"/>
    <deny users="*"/>
</authorization>

すべてのユーザーに GET の実行を許可し、Kim だけに POST の実行を許可する例を次に示します。

<authorization>
    <allow verb="GET" users="*"/>
    <allow verb="POST" users="Kim"/>
    <deny verb="POST" users="*"/> 
</authorization>

規則は、次のヒューリスティックにより適用されます。

  • 下位レベルのディレクトリにある構成ファイルに含まれる規則は、上位レベルのディレクトリの規則に優先します。どの規則を優先するかは、ある URL に対する全規則を最も新しい (階層構造内で最も近い) 規則が先頭に来るようにマージしたリストを生成することによって、システムが決定します。

  • ある URL に対する規則のマージ済みリストが存在する場合、システムは一致する規則が最初に見つかるまでリストの先頭から規則をチェックしていきます。ASP.NET の既定の構成には <allow users="*"> 要素が含まれています。この要素はすべてのユーザーに許可を与えます。一致する規則が見つからない場合、その要求は、他の理由で拒否されない限り許可されます。<deny> 要素の一致が見つかった場合は、ステータス コード 401 を返します。アプリケーションまたはサイトでは、サイトまたはアプリケーションのトップ レベルで <deny users="*"> 要素を構成することで、この動作を簡単に防止できます。

    <allow> 要素が一致した場合には、このモジュールは何も行わず、要求の処理が続行されます。

また、<location> タグを使用して特定のファイルまたはディレクトリを指定し、<location> タグと </location> タグの間に指定した設定を適用することもできます。

参照

ASP.NET Web アプリケーションのセキュリティ | 構成の階層構造 | <location> の構成設定 | FileAuthorizationModule クラス | ASP.NET の偽装 | UrlAuthorizationModule クラス | IPrincipal インターフェイス