認証のためのサービスの ID のオーバーライド
クライアント資格情報の種類を選択すると、サービス メタデータで公開される ID の種類が指定されるため、通常、サービスで ID を設定する必要はありません。たとえば、次の構成コードでは、<wsHttpBinding>要素を使用し、clientCredentialType 属性を Windows に設定しています。
次の Web サービス記述言語 (WSDL) コードは、定義済みのエンドポイントの ID を示しています。この例では、サービスは、特定のユーザー アカウント (username@contoso.com) で自己ホスト型サービスとして実行されているため、ユーザー プリンシパル名 (UPN) ID にこのアカウント名が含まれています。UPN は、Windows ドメインではユーザー ログオン名とも呼ばれます。
ID の設定を示すサンプル アプリケーションについては、「Service Identity Sample」を参照してください。サービス ID 詳細については、 、「サービス ID と認証」を参照してください。
Kerberos 認証と ID
Windows 資格情報を使用するようにサービスを構成した場合、既定では、<userPrincipalName> 要素または <servicePrincipalName> 要素を含む <identity> 要素が WSDL で生成されます。サービスが LocalSystem、LocalService、NetworkService のいずれかのアカウントで実行されている場合、これらのアカウントはコンピュータのサービス プリンシパル名 (SPN) データにアクセスできるため、host/<hostname> という形式の SPN が既定で生成されます。サービスが別のアカウントで実行されている場合、Windows Communication Foundation (WCF) は、<username>@<domainName> という形式の UPN を生成します。これらが生成されるのは、Kerberos 認証では、サービスを認証するために UPN または SPN をクライアントに提供する必要があるからです。
Setspn.exe ツールを使用して、他の SPN をドメイン内のサービスのアカウントに登録することもできます。登録した SPN は、そのサービスの ID として使用できます。ツールをダウンロードするには、「Windows 2000 リソース キット ツール : Setspn.exe」を参照してください。ツール詳細については、 、「Setspn の概要」を参照してください。
メモ : |
---|
ネゴシエーションを行わずに Windows 資格情報を使用するには、サービスのユーザー アカウントが Active Directory ドメインに登録された SPN にアクセスできる必要があります。これは、次の方法で実行できます。 |
- サービスを実行するには、NetworkService アカウントまたは LocalSystem アカウントを使用します。これらのアカウントは、コンピュータが Active Directory ドメインに参加したときに確立されたコンピュータの SPN にアクセスできるため、WCF は、適切な SPN 要素を、サービスのメタデータ (WSDL) にあるサービスのエンドポイント内部に自動的に生成します。
- 任意の Active Directory ドメイン アカウントを使用してサービスを実行します。この場合、そのドメイン アカウント用の SPN を確立します。これには、Setspn.exe ユーティリティ ツールを使用できます。サービスのアカウント用の SPN を作成したら、SPN をそのメタデータ (WSDL) を通じてサービスのクライアントに公開するように WCF を構成します。これを行うには、アプリケーション構成ファイルまたはコードを使用して、公開されるエンドポイントのエンドポイント ID を設定します。
SPN、Kerberos プロトコル、および Active Directory 詳細については、 、「Kerberos に関する技術的な補足 (Windows 用)」を参照してください。
SPN または UPN が空の文字列の場合
空の文字列の SPN または UPN を設定した場合は、使用しているセキュリティ レベルと認証モードに応じて、次のようになります。
- トランスポート レベルのセキュリティを使用している場合は、NTLM (NT LanMan) 認証が選択されます。
- メッセージ レベルのセキュリティを使用している場合は、認証モードによっては認証に失敗する可能性があります。
- spnego モードを使用し、AllowNtlm 属性を false に設定している場合は、認証に失敗します。
- spnego モードを使用し、AllowNtlm 属性を true に設定している場合、UPN が空の場合は認証に失敗しますが、SPN が空の場合は認証に成功します。
- Kerberos ダイレクト ("ワンショット" とも呼ばれます) を使用している場合は、認証に失敗します。
構成での <identity> 要素の使用
前の例で示したバインディングのクライアント資格情報の種類を Certificate に変更すると、生成される WSDL には、Base64 でシリアル化された ID 値用の X.509 証明書が含まれます。コードを次に示します。これは、Windows 以外のすべてのクライアント資格情報の種類の既定値です。
構成で <identity> 要素を使用するか、コードで ID を設定することにより、既定のサービス ID の値を変更することも、ID の種類を変更することもできます。値 contoso.com
を使用してドメイン ネーム システム (DNS) ID を設定する構成コードを次に示します。
プログラムによる ID の設定
ID は、WCF によって自動的に決定されるため、サービスで ID を明示的に指定する必要はありません。ただし、WCF では、必要に応じてエンドポイントの ID を指定できます。特定の DNS ID を持つ新しいサービス エンドポイントを追加するコードを次に示します。