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

このサンプルでは、<serviceAuthorization> を使用して、サービス操作へのアクセスを認可する PrincipalPermissionAttribute 属性を使用できるようにする方法を示します。 このサンプルは、「入門サンプル」に基づいています。 サービスとクライアントは、<wsHttpBinding> を使用して構成されています。 modemode 属性は Message に設定され、clientCredentialTypeWindows に設定されています。 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>

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 版をビルドするには、「 Building the Windows Communication Foundation Samples」の手順に従います。

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