方法 : PrincipalPermissionAttribute クラスでアクセスを制限する
Windows ドメイン コンピュータのリソースへのアクセスを制御することは、基本的なセキュリティ タスクです。たとえば、給与情報のような機密データは、特定のユーザーだけが表示できるようにする必要があります。ここでは、ユーザーが定義済みグループに属していることを要求することによって、メソッドへのアクセスを制限する方法について説明します。実際に動作するサンプルについては、「Authorizing Access to Service Operations」を参照してください。
タスクは、2 つの別個の手順で構成されます。最初の手順では、グループを作成してユーザーを追加します。2 番目の手順では、グループを指定するために PrincipalPermissionAttribute クラスを適用します。
Windows グループを作成するには
[コンピュータの管理] コンソールを開きます。
左のパネルで、[ローカル ユーザーとグループ] をクリックします。
[グループ] を右クリックし、[新しいグループ] をクリックします。
[グループ名] ボックスに、新しいグループの名前を入力します。
[説明] ボックスに、新しいグループの説明を入力します。
[追加] をクリックして、グループに新しいメンバを追加します。
自分自身をグループに追加した場合は、次のコードをテストする前に、コンピュータからいったんログオフし、再度ログオンして自分自身をグループに含める必要があります。
ユーザー メンバシップを要求するには
実装されたサービス コントラクト コードを含む Windows Communication Foundation (WCF) コード ファイルを開きます。コントラクトの実装詳細については、 、「サービス コントラクトの実装」を参照してください。
特定のグループに制限される必要がある各メソッドに PrincipalPermissionAttribute 属性を適用します。Action プロパティを Demand に設定し、Role プロパティをグループの名前に設定します。次に例を示します。
メモ : PrincipalPermissionAttribute 属性をコントラクトに適用すると、SecurityException がスローされます。この属性はメソッド レベルにのみ適用できます。
証明書を使用したメソッドへのアクセスの制御
クライアント資格情報の種類が "証明書" の場合は、PrincipalPermissionAttribute クラスを使用してメソッドへのアクセスを制御することもできます。そのためには、証明書のサブジェクトとサムプリントが必要になります。
証明書のプロパティを確認する方法については、「方法 : MMC スナップインを使用して証明書を参照する」を参照してください。サムプリントの値を検索する方法については、「方法 : 証明書のサムプリントを取得する」を参照してください。
証明書を使用してアクセスを制御するには
アクセスを制限するメソッドに PrincipalPermissionAttribute クラスを適用します。
属性のアクションを System.Security.Permissions.SecurityAction.Demand に設定します。
Name プロパティを、サブジェクト名と証明書のサムプリントで構成される文字列に設定します。次の例に示すように、2 つの値をセミコロンと空白で区切ってください。
次の構成例に示すように、PrincipalPermissionMode プロパティを UseAspNetRoles に設定します。
<behaviors> <serviceBehaviors> <behavior name="SvcBehavior1"> <serviceAuthorization principalPermissionMode="UseAspNetRoles" /> </behavior> </serviceBehaviors> </behaviors>
この値を
UseAspNetRoles
に設定すると、PrincipalPermissionAttribute の Name プロパティを使用して文字列が比較されます。クライアント資格情報として証明書を使用している場合、既定では、WCF は証明書の共通名とサムプリントをセミコロンで連結して、クライアントのプライマリ ID を表す一意の値が作成されます。UseAspNetRoles
をサービスのPrincipalPermissionMode
として設定している場合、このプライマリ ID の値と Name プロパティの値を比較してユーザーのアクセス権が決定されます。また、自己ホスト型サービスを作成する場合は、次のコードに示すように、コードの PrincipalPermissionMode プロパティを設定します。
関連項目
リファレンス
PrincipalPermissionAttribute
PrincipalPermissionAttribute
Demand
Role