方法 : サービスでクライアントに偽装する
Windows Communication Foundation (WCF) サービスでクライアントを偽装すると、サービスはクライアントの代理としてアクションを実行できます。コンピュータ上のディレクトリやファイルへのアクセス、または SQL Server データベースへのアクセスなど、アクセス制御リスト (ACL) のチェックを受けるアクションでは、ACL のチェックがクライアントのユーザー アカウントに対して行われます。ここでは、Windows ドメインのクライアントで、クライアント偽装レベルを設定できるようにするために必要な基本的な手順について説明します。このパターンの実施例については、「Impersonating the Client」を参照してください。クライアントの偽装詳細については、 、「WCF の委任と偽装」を参照してください。
メモ : |
---|
クライアントとサービスが同じコンピュータ上で実行されており、クライアントがシステム アカウント (Local System や Network Service など) で実行されているときに、ステートフルなセキュリティ コンテキスト トークンを使用してセキュリティで保護されたセッションを確立した場合、クライアントを偽装することはできません。通常、WinForms アプリケーションやコンソール アプリケーションは、現在ログインしているアカウントで実行されるため、既定でそのアカウントを偽装できます。ただし、クライアントが ASP.NET ページであり、そのページが IIS 6.0 または IIS 7.0 でホストされている場合、既定では、クライアントは Network Service アカウントで実行されます。セキュリティで保護されたセッションをサポートするシステム提供のすべてのバインディングは、ステートフルなセキュリティ コンテキスト トークンを既定で使用します。ただし、クライアントが ASP.NET ページであり、ステートフルなセキュリティ コンテキスト トークンを使用する、セキュリティで保護されたセッションを使用している場合は、クライアントを偽装できません。セキュリティで保護されたセッションでのステートフルなセキュリティ コンテキスト トークンの使用方法詳細については、 、「方法 : セキュリティで保護されたセッションに対しステートフルなセキュリティ コンテキスト トークンを作成する」を参照してください。 |
サービスにキャッシュされた Windows トークンでクライアントの偽装を有効にするには
サービスを作成します。この基本的な手順のチュートリアルについては、「チュートリアル入門」を参照してください。
Windows 認証を使用してセッションを作成するバインディング (NetTcpBinding や WSHttpBinding など) を使用します。
サービスのインターフェイスの実装を作成するときには、クライアントの偽装を必要とするメソッドに OperationBehaviorAttribute クラスを適用します。Impersonation プロパティを Required に設定します。
クライアントに許可される偽装レベルを設定するには
サービス クライアント コードは、ServiceModel Metadata Utility Tool (Svcutil.exe) を使用して作成します。詳細な情報については、次のページを参照してください。 「WCF クライアントを使用したサービスへのアクセス」を参照してください。
WCF クライアントの作成後、WindowsClientCredential クラスの AllowedImpersonationLevel プロパティを TokenImpersonationLevel 列挙値の 1 つに設定します。
メモ : Delegation を使用するには、ネゴシエート Kerberos 認証 ("マルチレッグ" Kerberos または "マルチステップ" Kerberos と呼ぶこともあります) を使用する必要があります。これを実装する方法については、「WCF のセキュリティのベスト プラクティス」を参照してください。
関連項目
リファレンス
OperationBehaviorAttribute
TokenImpersonationLevel