サービス操作へのアクセスの承認
このサンプルでは、<serviceAuthorization> を使用して、サービス操作へのアクセスを認可する PrincipalPermissionAttribute 属性を使用できるようにする方法を示します。 このサンプルは、「入門サンプル」に基づいています。 サービスとクライアントは、<wsHttpBinding> を使用して構成されています。 mode
の mode
属性は Message
に設定され、clientCredentialType
は Windows
に設定されています。 PrincipalPermissionAttribute は各サービス メソッドに適用され、各操作へのアクセスを制限するために使用されます。 呼び出し元は、各操作にアクセスできる Windows 管理者である必要があります。
この例では、クライアントはコンソール アプリケーション (.exe) であり、サービスはインターネット インフォメーション サービス (IIS) によってホストされます。
Note
このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。
サービス構成ファイルでは、次のように <serviceAuthorization> を使用して 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 版をビルドするには、「 Building the Windows Communication Foundation Samples」の手順に従います。
単一または複数コンピューター構成でサンプルを実行するには、「Windows Communication Foundation サンプルの実行」の手順に従います。