サービス操作へのアクセスの承認
このサンプルでは、PrincipalPermissionAttribute 属性を使用できるようにする <serviceAuthorization> elementを使用して、サービス操作へのアクセスを承認する方法を示します。このサンプルは、「入門サンプル」のサンプルに基づいています。サービスとクライアントは、wsHttpBinding Elementを使用して構成されています。Security elementの mode 属性は Message に、clientCredentialType は Windows に設定されています。PrincipalPermissionAttribute は各サービス メソッドに適用され、各操作へのアクセスを制限するために使用されます。呼び出し元は、各操作にアクセスできる Windows 管理者である必要があります。
この例では、クライアントはコンソール アプリケーション (.exe) であり、サービスはインターネット インフォメーション サービス (IIS) によってホストされます。
注 : |
---|
このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。 |
サービス構成ファイルは、次のように <serviceAuthorization> elementを使用して principalPermissionMode 属性を設定します。
<behaviors>
<serviceBehaviors>
<behavior>
...
<!-- The serviceAuthorization behavior sets the principalPermissionMode to UseWindowsGroups.
This puts a WindowsPrincipal on the current thread when a service is invoked. -->
<serviceAuthorization principalPermissionMode="UseWindowsGroups" />
</behavior>
</serviceBehaviors>
</behaviors>
principalPermissionMode を UseWindowsGroups に設定すると、Windows グループ名に基づいて PrincipalPermissionAttribute を使用できるようになります。
呼び出し元が Windows 管理者グループのメンバーであることを要求するため、PrincipalPermissionAttribute が各操作に適用されます。次のサンプル コードを参照してください。
[PrincipalPermission(SecurityAction.Demand,
Role = "Builtin\\Administrators")]
public double Add(double n1, double n2)
{
double result = n1 + n2;
return result;
}
このサンプルを実行すると、操作要求および応答がクライアントのコンソール ウィンドウに表示されます。クライアントが管理者グループのメンバーであるアカウントで実行される場合、クライアントは各操作と正常に通信できます。それ以外のアカウントで実行される場合、アクセスは拒否されます。承認エラーを試すには、管理グループのメンバーではないアカウントでクライアントを実行します。クライアントをシャットダウンするには、コンソール ウィンドウで Enter キーを押します。
IErrorHandler を実装すると、サービスに承認エラーを通知することができます。IErrorHandler
の実装方法については、「エラー処理およびレポートに対する制御の拡張」を参照してください。
サンプルを設定、ビルド、および実行するには
「Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。
ソリューションの C# 版または Visual Basic .NET 版をビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。
サンプルを単一コンピューター構成または複数コンピューター構成で実行するには、「Running the Windows Communication Foundation Samples」の手順に従います。