このサンプルでは、 <serviceAuthorization> を使用して PrincipalPermissionAttribute 属性を使用してサービス操作へのアクセスを承認する方法を示します。 このサンプルは、Getting Started サンプルを基にしています。 サービスとクライアントは、<wsHttpBinding> を使用して構成されます。
mode
security<の>属性がMessage
に設定され、clientCredentialType
がWindows
に設定されています。
PrincipalPermissionAttributeは、各サービス メソッドに適用され、各操作へのアクセスを制限するために使用されます。 各操作にアクセスするには、呼び出し元が Windows 管理者である必要があります。
このサンプルでは、クライアントはコンソール アプリケーション (.exe) であり、サービスはインターネット インフォメーション サービス (IIS) によってホストされています。
注
このサンプルのセットアップ手順とビルド手順は、このトピックの最後にあります。
サービス構成ファイルは<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を使用できます。
PrincipalPermissionAttributeは、次のサンプル コードに示すように、呼び出し元が Windows 管理者グループの一部であることを要求するために、各操作に適用されます。
[PrincipalPermission(SecurityAction.Demand,
Role = "Builtin\\Administrators")]
public double Add(double n1, double n2)
{
double result = n1 + n2;
return result;
}
サンプルを実行すると、操作要求と応答がクライアント コンソール ウィンドウに表示されます。 Administrators グループの一部であるアカウントで実行されている場合、クライアントは各操作と正常に通信します。それ以外の場合、アクセスは拒否されます。 承認エラーを試すには、Administrators グループに含まれていないアカウントでクライアントを実行します。 コンソール ウィンドウで Enter キーを押して、クライアントをシャットダウンします。
IErrorHandlerを実装することで、承認エラーをサービスに通知できます。
の実装については、「IErrorHandler
」を参照してください。
サンプルを設定、ビルド、実行するには
Windows Communication Foundation サンプル のOne-Time セットアップ手順を実行していることを確認します。
ソリューションの C# または Visual Basic .NET エディションをビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。
シングル コンピューター構成またはクロスコンピューター構成でサンプルを実行するには、「 Windows Communication Foundation サンプルの実行」の手順に従います。