次の方法で共有


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

このサンプルでは、 <serviceAuthorization> を使用して PrincipalPermissionAttribute 属性を使用してサービス操作へのアクセスを承認する方法を示します。 このサンプルは、Getting Started サンプルを基にしています。 サービスとクライアントは、<wsHttpBinding> を使用して構成されます。 modesecurity<の>属性がMessageに設定され、clientCredentialTypeWindowsに設定されています。 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>

principalPermissionModeUseWindowsGroups に設定すると、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」を参照してください。

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

  1. Windows Communication Foundation サンプル One-Time セットアップ手順を実行していることを確認します。

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

  3. シングル コンピューター構成またはクロスコンピューター構成でサンプルを実行するには、「 Windows Communication Foundation サンプルの実行」の手順に従います。