方法 : サービスでクライアントに偽装する

Windows Communication Foundation (WCF) サービスでクライアントを偽装すると、サービスはクライアントの代理としてアクションを実行できます。コンピューター上のディレクトリやファイルへのアクセス、または SQL Server データベースへのアクセスなど、アクセス制御リスト (ACL) のチェックを受けるアクションでは、ACL のチェックがクライアントのユーザー アカウントに対して行われます。ここでは、Windows ドメインのクライアントで、クライアント偽装レベルを設定できるようにするために必要な基本的な手順について説明します。このパターンの実施例については、「Impersonating the Client」を参照してください。クライアントの偽装詳細情報、「WCF の委任と偽装」を参照してください。

ms731090.note(ja-jp,VS.100).gif注 :
クライアントとサービスが同じコンピューター上で実行されており、クライアントがシステム アカウント (Local SystemNetwork Service など) で実行されているときに、ステートフルなセキュリティ コンテキスト トークンを使用してセキュリティで保護されたセッションを確立した場合、クライアントを偽装することはできません。通常、WinForms アプリケーションやコンソール アプリケーションは、現在ログインしているアカウントで実行されるため、既定でそのアカウントを偽装できます。ただし、クライアントが ASP.NET ページであり、そのページが IIS 6.0 または IIS 7.0 でホストされている場合、既定では、クライアントは Network Service アカウントで実行されます。セキュリティで保護されたセッションをサポートするシステム提供のすべてのバインディングは、ステートフルなセキュリティ コンテキスト トークンを既定で使用します。ただし、クライアントが ASP.NET ページであり、ステートフルなセキュリティ コンテキスト トークンを使用する、セキュリティで保護されたセッションを使用している場合は、クライアントを偽装できません。セキュリティで保護されたセッションでのステートフルなセキュリティ コンテキスト トークンの使用方法詳細情報、「方法 : セキュリティで保護されたセッションに対しセキュリティ コンテキスト トークンを作成する」を参照してください。

サービスにキャッシュされた Windows トークンでクライアントの偽装を有効にするには

  1. サービスを作成します。この基本的な手順のチュートリアルについては、「チュートリアル入門」を参照してください。

  2. Windows 認証を使用してセッションを作成するバインディング (NetTcpBindingWSHttpBinding など) を使用します。

  3. サービスのインターフェイスの実装を作成するときには、クライアントの偽装を必要とするメソッドに OperationBehaviorAttribute クラスを適用します。Impersonation プロパティを Required に設定します。

    <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 
    
    [OperationBehavior(Impersonation=ImpersonationOption.Required)]
    public double Add(double a, double b)
    {
        return a + b;
    }
    

クライアントに許可される偽装レベルを設定するには

  1. サービス クライアント コードは、ServiceModel メタデータ ユーティリティ ツール (Svcutil.exe) を使用して作成します。詳細については、次のトピックを参照してください。、「WCF クライアントを使用したサービスへのアクセス」を参照してください。

  2. WCF クライアントの作成後、WindowsClientCredential クラスの AllowedImpersonationLevel プロパティを TokenImpersonationLevel 列挙値の 1 つに設定します。

    ms731090.note(ja-jp,VS.100).gif注 :
    Delegation を使用するには、ネゴシエート Kerberos 認証 ("マルチレッグ" Kerberos または "マルチステップ" Kerberos と呼ぶこともあります) を使用する必要があります。これを実装する方法については、「WCF のセキュリティのベスト プラクティス」を参照してください。

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

参照

処理手順

Impersonating the Client

リファレンス

OperationBehaviorAttribute
TokenImpersonationLevel

概念

WCF の委任と偽装