トランスポート セキュリティでの偽装の使用
"偽装" とは、サーバー アプリケーションがクライアントの ID を使用できることを意味します。 リソースへのアクセスを検証するときに、サービスでは偽装が広く使用されます。 サーバー アプリケーションはサービス アカウントを使用して実行されますが、クライアントの接続を受け入れたサーバーは、クライアントの資格情報を使用してアクセス チェックが実行できるようにクライアントを偽装します。 トランスポート セキュリティは、資格情報を渡すこと、および渡された資格情報を使用して通信をセキュリティで保護することの 2 つの機構から成ります。 このトピックでは、Windows Communication Foundation (WCF) のトランスポート セキュリティと共に偽装機能を使用する方法について説明します。 メッセージ セキュリティを使用した偽装の詳細については、委任と偽装に関するページを参照してください。
5 つの偽装レベル
トランスポート セキュリティでは、次の表で説明するように 5 つの偽装レベルを使用します。
偽装レベル | 説明 |
---|---|
なし | サーバー アプリケーションは、クライアントの偽装を試みません。 |
匿名 | サーバー アプリケーションはクライアントの資格情報に対してアクセス チェックを実行できますが、クライアントの ID に関する情報は一切受け取りません。 この偽装レベルは、名前付きパイプなど、コンピューター上での通信にのみ意味があります。 リモート接続で Anonymous レベルを使用すると、Identify レベルの偽装に昇格されます。 |
識別 | サーバー アプリケーションは、クライアントの ID を認識し、クライアントの資格情報に対するアクセスの検証を実行できますが、クライアントを偽装することはできません。 トークン プロバイダーによって別の偽装レベルが提供されない限り、Identify レベルは WCF の SSPI 資格情報で使用される既定の偽装レベルになります。 |
Impersonate | サーバー アプリケーションは、アクセス チェックを実行できるだけでなく、クライアントとしてサーバー コンピューターのリソースにアクセスできます。 偽装されたトークンにはネットワーク資格情報が含まれないため、サーバー アプリケーションはクライアントの ID を使用してリモート コンピューター上のリソースにアクセスできません。 |
代理人 | Impersonate と同じ機能に加えて、Delegate レベルの偽装では、サーバー アプリケーションがクライアントの ID を使用してリモート コンピューターのリソースにアクセスし、この ID を他のアプリケーションに渡すことができます。重要これらの追加の機能を使用するには、ドメイン コントローラー上でそのサーバーのドメイン アカウントが委任先として信頼できるものとしてマークされている必要があります。 このレベルの偽装は、機密としてマークされているクライアント ドメイン アカウントでは使用できません。 |
トランスポート セキュリティで最も多く使用されるレベルは、Identify
および Impersonate
です。 None
および Anonymous
レベルは、通常の使用にはお勧めしません。トランスポートの多くでは認証でこのレベルの使用をサポートしていません。 Delegate
レベルの機能は強力であり、使用に際しては注意が必要です。 資格情報を委任するアクセス許可は、信頼できるサーバー アプリケーションにのみ与える必要があります。
Impersonate
または Delegate
レベルで偽装を使用するには、サーバー アプリケーションが SeImpersonatePrivilege
特権を持っている必要があります。 管理者グループのアカウントまたはサービス SID (Network Service、Local Service、または Local System) を持つアカウントでアプリケーションを実行している場合は、アプリケーションに既定でこの特権があります。 偽装ではクライアントとサーバーの相互認証は必要ありません。 NTLM など、偽装をサポートする認証方式の中には、相互認証を使用できないものもあります。
偽装でのトランスポート固有の問題
WCF におけるトランスポートの選択は、選択できる偽装のレベルに影響を与えます。 ここでは、WCF の標準 HTTP トランスポートと名前付きパイプ トランスポートに影響する問題について説明します。 カスタム トランスポートには、偽装のサポートに関して独自の制限があります。
名前付きパイプ トランスポート
次の項目が名前付きパイプ トランスポートと共に使用されます。
名前付きパイプ トランスポートはローカル コンピューター上のみで使用します。 WCF の名前付きパイプでは、コンピューター間の接続が明示的に禁止されています。
名前付きパイプは、
Impersonate
またはDelegate
偽装レベルでは使用できません。 これらの偽装レベルでは、名前付きパイプはコンピューター上で保障されません。
名前付きパイプの詳細については、「トランスポートの選択」を参照してください。
HTTP トランスポート
HTTP トランスポートを使用するバインディング (WSHttpBinding と BasicHttpBinding) では、「HTTP 認証の理解」で説明するように、いくつかの認証方式がサポートされます。 サポートされる偽装レベルは、認証方式によって異なります。 次の項目が HTTP トランスポートと共に使用されます。
Anonymous
認証方式は偽装を無視します。Basic
認証方式はDelegate
レベルのみをサポートします。 これより低い偽装レベルは、アップグレードされます。Digest
認証方式では、Impersonate
レベルとDelegate
レベルのみをサポートします。NTLM
認証方式は、直接またはネゴシエーション経由で選択可能で、ローカル コンピューターでDelegate
レベルのみをサポートします。Kerberos 認証方式は、ネゴシエーション経由でのみ選択可能で、サポートされるすべての偽装レベルで使用できます。
HTTP トランスポートの詳細については、「トランスポートの選択」を参照してください。