偽装 とは、サーバー アプリケーションがクライアントの ID を引き受ける機能です。 サービスでは、リソースへのアクセスを検証するときに偽装を使用するのが一般的です。 サーバー アプリケーションはサービス アカウントを使用して実行されますが、サーバーはクライアント接続を受け入れると、クライアントの資格情報を使用してアクセス チェックが実行されるように、クライアントを偽装します。 トランスポート セキュリティは、資格情報を渡し、それらの資格情報を使用して通信をセキュリティで保護するためのメカニズムです。 このトピックでは、偽装機能を使用した Windows Communication Foundation (WCF) でのトランスポート セキュリティの使用について説明します。 メッセージ セキュリティを使用した偽装の詳細については、「 委任と偽装」を参照してください。
5 つの偽装レベル
トランスポート セキュリティでは、次の表に示すように、5 つのレベルの偽装が使用されます。
偽装レベル | 説明 |
---|---|
無し | サーバー アプリケーションは、クライアントの偽装を試みません。 |
アノニマス | サーバー アプリケーションは、クライアントの資格情報に対してアクセス チェックを実行できますが、クライアントの ID に関する情報は受け取りません。 この偽装レベルは、名前付きパイプなどのコンピューター上の通信に対してのみ意味があります。 リモート接続で Anonymous を使用すると、偽装レベルが Identify に昇格します。 |
識別 | サーバー アプリケーションはクライアントの ID を認識し、クライアントの資格情報に対してアクセス検証を実行できますが、クライアントを偽装することはできません。 識別は、トークン プロバイダーが別の偽装レベルを提供しない限り、WCF の SSPI 資格情報で使用される既定の偽装レベルです。 |
なりすます | サーバー アプリケーションは、アクセス チェックを実行するだけでなく、クライアントとしてサーバー コンピューター上のリソースにアクセスできます。 偽装されたトークンにネットワーク資格情報がないため、サーバー アプリケーションはクライアントの ID を使用してリモート コンピューター上のリソースにアクセスできません |
委任 | 委任偽装レベルでは、 Impersonate と同じ機能を持つことに加えて、サーバー アプリケーションがクライアントの ID を使用してリモート コンピューター上のリソースにアクセスし、その ID を他のアプリケーションに渡すこともできます。大事な これらの追加機能を使用するには、サーバー ドメイン アカウントがドメイン コントローラーでの委任に対して信頼済みとしてマークされている必要があります。 このレベルの偽装は、機密としてマークされたクライアント ドメイン アカウントでは使用できません。 |
トランスポート セキュリティで最も一般的に使用されるレベルは、 Identify
と Impersonate
です。 一般的な使用には、 None
レベルと Anonymous
レベルは推奨されません。また、多くのトランスポートでは、認証でのこれらのレベルの使用はサポートされていません。
Delegate
レベルは、注意して使用する必要がある強力な機能です。 資格情報を委任するアクセス許可は、信頼されたサーバー アプリケーションにのみ付与する必要があります。
Impersonate
レベルまたはDelegate
レベルで偽装を使用するには、サーバー アプリケーションにSeImpersonatePrivilege
特権が必要です。 アプリケーションは、Administrators グループ内のアカウント、またはサービス SID (ネットワーク サービス、ローカル サービス、またはローカル システム) を持つアカウントで実行されている場合、既定でこの特権を持ちます。 偽装では、クライアントとサーバーの相互認証は必要ありません。 NTLM などの偽装をサポートする一部の認証スキームは、相互認証では使用できません。
偽装に関する Transport-Specific の問題
WCF でのトランスポートの選択は、偽装の選択肢に影響します。 このセクションでは、WCF の標準 HTTP および名前付きパイプ トランスポートに影響する問題について説明します。 カスタム トランスポートには、偽装のサポートに関する独自の制限があります。
名前付きパイプ トランスポート
名前付きパイプ トランスポートでは、次の項目が使用されます。
名前付きパイプ トランスポートは、ローカル コンピューターでのみ使用することを目的としています。 WCF の名前付きパイプ トランスポートは、マシン間接続を明示的に禁止します。
名前付きパイプは、
Impersonate
レベルまたはDelegate
偽装レベルでは使用できません。 名前付きパイプでは、これらの偽装レベルでマシン上の保証を適用することはできません。
名前付きパイプの詳細については、「 トランスポートの選択」を参照してください。
HTTP トランスポート
HTTP トランスポート (WSHttpBinding と BasicHttpBinding) を使用するバインディングは、「HTTP 認証について」で説明されているように、いくつかの 認証スキームをサポートします。 サポートされる偽装レベルは、認証スキームによって異なります。 HTTP トランスポートでは、次の項目が使用されます。
Anonymous
認証スキームは、偽装を無視します。Basic
認証スキームでは、Delegate
レベルのみがサポートされます。 下位の偽装レベルはすべてアップグレードされます。Digest
認証スキームでは、Impersonate
レベルとDelegate
レベルのみがサポートされます。NTLM
認証スキームは、直接またはネゴシエーションを通じて選択できます。ローカル コンピューター上のDelegate
レベルのみがサポートされます。ネゴシエーションによってのみ選択できる Kerberos 認証スキームは、サポートされている任意の偽装レベルで使用できます。
HTTP トランスポートの詳細については、「 トランスポートの選択」を参照してください。