方法 : サービスでクライアントに偽装するHow to: Impersonate a Client on a Service

Windows Communication Foundation (WCF) サービスでクライアントを偽装すると、サービスはクライアントに代わってアクションを実行できるようになります。Impersonating a client on a Windows Communication Foundation (WCF) service enables the service to perform actions on behalf of the client. コンピューター上のディレクトリやファイルへのアクセス、または SQL Server データベースへのアクセスなど、アクセス制御リスト (ACL) のチェックを受けるアクションでは、ACL のチェックがクライアントのユーザー アカウントに対して行われます。For actions subject to access control list (ACL) checks, such as access to directories and files on a machine or access to a SQL Server database, the ACL check is against the client user account. ここでは、Windows ドメインのクライアントで、クライアント偽装レベルを設定できるようにするために必要な基本的な手順について説明します。This topic shows the basic steps required to enable a client in a Windows domain to set a client impersonation level. このパターンの実施例については、「 Impersonating the Client」を参照してください。For a working example of this, see Impersonating the Client. クライアントの偽装の詳細については、「委任と偽装」を参照してください。For more information about client impersonation, see Delegation and Impersonation.

注意

クライアントとサービスが同じコンピューター上で実行されており、クライアントがシステム アカウント ( Local SystemNetwork Serviceなど) で実行されているときに、ステートレスなセキュリティ コンテキスト トークンを使用してセキュリティで保護されたセッションを確立した場合、クライアントを偽装することはできません。When the client and service are running on the same computer and the client is running under a system account (that is, Local System or Network Service), the client cannot be impersonated when a secure session is established with stateful Security Context tokens. 通常、WinForms アプリケーションやコンソール アプリケーションは、現在ログインしているアカウントで実行されるため、既定でそのアカウントを偽装できます。A WinForms or console application typically is run under the currently logged in account, so that account can be impersonated by default. ただし、クライアントが ASP.NET ページで、そのページが IIS 6.0 または IIS 7.0 でホストされている場合、クライアントは既定で @no__t 0 アカウントで実行されます。However, when the client is an ASP.NET page and that page is hosted in IIS 6.0 or IIS 7.0, then the client does run under the Network Service account by default. セキュリティで保護されたセッションをサポートするシステム提供のすべてのバインディングは、ステートフルなセキュリティ コンテキスト トークンを既定で使用します。All of the system-provided bindings that support secure sessions use a stateless Security Context token by default. ただし、クライアントが ASP.NET ページであり、ステートフルなセキュリティコンテキストトークンを使用してセキュリティで保護されたセッションを使用している場合、クライアントを偽装することはできません。However, if the client is an ASP.NET page and secure sessions with stateful Security Context tokens are used, the client cannot be impersonated. セキュリティで保護されたセッションでのステートフルなセキュリティコンテキストトークンの使用の詳細については、「方法: セキュリティで保護されたセッションのセキュリティコンテキストトークンを作成する」を参照してください。For more information about using stateful Security Context tokens in a secure session, see How to: Create a Security Context Token for a Secure Session.

サービスにキャッシュされた Windows トークンでクライアントの偽装を有効にするにはTo enable impersonation of a client from a cached Windows token on a service

  1. サービスを作成します。Create the service. この基本的な手順のチュートリアルについては、「 Getting Started Tutorial」を参照してください。For a tutorial of this basic procedure, see Getting Started Tutorial.

  2. Windows 認証を使用してセッションを作成するバインディング ( NetTcpBindingWSHttpBindingなど) を使用します。Use a binding that uses Windows authentication and creates a session, such as NetTcpBinding or WSHttpBinding.

  3. サービスのインターフェイスの実装を作成するときには、クライアントの偽装を必要とするメソッドに OperationBehaviorAttribute クラスを適用します。When creating the implementation of the service's interface, apply the OperationBehaviorAttribute class to the method that requires client impersonation. Impersonation プロパティを Requiredに設定します。Set the Impersonation property to Required.

    [OperationBehavior(Impersonation=ImpersonationOption.Required)]
    public double Add(double a, double b)
    {
        return a + b;
    }
    
    <OperationBehavior(Impersonation := ImpersonationOption.Required)>  _
    Public Function Add(ByVal a As Double, ByVal b As Double) As Double _
       Implements ICalculator.Add
        Return a + b
    End Function 
    

クライアントに許可される偽装レベルを設定するにはTo set the allowed impersonation level on the client

  1. ServiceModel Metadata Utility Tool (Svcutil.exe)を使用して、サービス クライアント コードを作成します。Create service client code by using the ServiceModel Metadata Utility Tool (Svcutil.exe). 詳細については、「 WCF クライアントを使用したサービスへのアクセス」を参照してください。For more information, see Accessing Services Using a WCF Client.

  2. WCF クライアントを作成した後、WindowsClientCredential クラスの AllowedImpersonationLevel プロパティを TokenImpersonationLevel 列挙値のいずれかに設定します。After creating the WCF client, set the AllowedImpersonationLevel property of the WindowsClientCredential class to one of the TokenImpersonationLevel enumeration values.

    注意

    Delegationを使用するには、ネゴシエート Kerberos 認証 ( "マルチレッグ" Kerberos または "マルチステップ" Kerberos と呼ぶこともあります) を使用する必要があります。To use Delegation, negotiated Kerberos authentication (sometimes called multi-leg or multi-step Kerberos) must be used. これを実装する方法の詳細については、「セキュリティのベストプラクティス」を参照してください。For a description of how to implement this, see Best Practices for Security.

    CalculatorClient client = new CalculatorClient("CalculatorEndpoint");
    client.ClientCredentials.Windows.AllowedImpersonationLevel =
        System.Security.Principal.TokenImpersonationLevel.Impersonation;
    
    Dim client As New CalculatorClient("CalculatorEndpoint")
    client.ClientCredentials.Windows.AllowedImpersonationLevel = _
        System.Security.Principal.TokenImpersonationLevel.Impersonation
    

関連項目See also