サービス操作へのアクセスの承認

このサンプルでは、PrincipalPermissionAttribute 属性を使用できるようにする <serviceAuthorization> elementを使用して、サービス操作へのアクセスを承認する方法を示します。このサンプルは、「入門サンプル」のサンプルに基づいています。サービスとクライアントは、wsHttpBinding Elementを使用して構成されています。Security elementmode 属性は Message に、clientCredentialTypeWindows に設定されています。PrincipalPermissionAttribute は各サービス メソッドに適用され、各操作へのアクセスを制限するために使用されます。呼び出し元は、各操作にアクセスできる Windows 管理者である必要があります。

この例では、クライアントはコンソール アプリケーション (.exe) であり、サービスはインターネット インフォメーション サービス (IIS) によってホストされます。

ms752243.note(ja-jp,VS.100).gif注 :
このサンプルのセットアップ手順とビルド手順については、このトピックの最後を参照してください。

サービス構成ファイルは、次のように <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>

principalPermissionModeUseWindowsGroups に設定すると、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 の実装方法については、「エラー処理およびレポートに対する制御の拡張」を参照してください。

サンプルを設定、ビルド、および実行するには

  1. Windows Communication Foundation サンプルの 1 回限りのセットアップの手順」が実行済みであることを確認します。

  2. ソリューションの C# 版または Visual Basic .NET 版をビルドするには、「Windows Communication Foundation サンプルのビルド」の手順に従います。

  3. サンプルを単一コンピューター構成または複数コンピューター構成で実行するには、「Running the Windows Communication Foundation Samples」の手順に従います。