方法 : クライアントの資格情報の値を指定する
Windows Communication Foundation (WCF) では、サービスに対するクライアントの認証方法を指定できます。たとえば、証明書を使用してクライアントを認証するように指定できます。この例では、セキュリティ モードを "Transport (トランスポート)" に設定し、クライアント資格情報の種類を "Certificate (証明書)" に設定します。
このプロセスは、3 つの部分で構成されます。
- サービスの開発者は、クライアントが提供する必要のある "資格情報の種類" を指定します**。
- クライアントの開発者は、ServiceModel Metadata Utility Tool (Svcutil.exe) を使用して、サービスにメタデータ (サービス クライアント コードと構成ファイル) を照会します。
- クライアントの開発者はクライアント アプリケーションを作成し、メタデータで指定されている資格情報の種類に一致する資格情報の値をコードまたは構成で指定します。
サービス コード
サービスでクライアント資格情報の種類をコードによって指定するには
以下の参照をコードに追加します。
バインディングのインスタンスを作成します。この例では、NetTcpBinding を使用します。
セキュリティ モードを適切に設定します。この例では、モードを Transport に設定します。
ClientCredentialType に適切な資格情報の種類を設定します。この例では、資格情報の種類を Certificate に設定します。
コンストラクタ内で、サービス型を使用して ServiceHost のインスタンスを作成します。単純化するために、ここではサービス インターフェイスとその実装を表すコードは示していません。
サービスの資格情報の値を設定します。この例では、X509CertificateRecipientServiceCredential クラスの SetCertificate メソッドを使用します。
サービスでクライアント資格情報の種類を構成によって指定するには
<bindings>
要素に適切なバインディングを追加します。この例では、<netTcpBinding Element> を使用します。バインディングに <security> of <netTcpBinding> を追加します。
name
属性 (必須) を適切な値に必ず設定してください。mode
属性を適切な値に設定します。この例では、"Message"
モードを使用します。セキュリティ バインディングに transport 要素または message 要素を適宜追加します。この例では、<message> element of <netTcpBinding> を使用します。
clientCredential
属性を、適切な資格情報の種類に設定します。この例では、"Certificate"
を使用します。<bindings> <netTcpBinding> <binding name="TcpBindingWithCredential"> <security mode="Message"> <message clientCredentialType="Certificate" /> </security> </binding> </netTcpBinding> </bindings>
エンドポイント要素を作成するときは、次のコードに示すように、
bindingConfiguration
属性値を使用してバインディング構成を指定します。<endpoint address="myEndpointAddress" binding="netTcpBinding" bindingConfiguration="TcpBindingWithCredential" name="netTcpBinding_ICalculator" contract="Microsoft.ServiceModel.Samples.ICalculator" />
クライアント コード
次の手順では、クライアントでクライアント資格情報の値をコードと構成を使用して設定する方法を示します。ここでは、サービスからメタデータ (コードと構成) を返すために ServiceModel Metadata Utility Tool (Svcutil.exe) を使用していることを前提としています。詳細な情報については、次のページを参照してください。 「方法 : Windows Communication Foundation クライアントを作成する」を参照してください。
クライアントでクライアント資格情報の値をコードによって指定するには
ServiceModel Metadata Utility Tool (Svcutil.exe) を使用して、サービスからコードと構成を生成します。
生成されたコードを使用して、WCF クライアントのインスタンスを作成します。
クライアント クラスで、ClientBase クラスの ClientCredentials プロパティを適切な値に設定します。この例では、X509CertificateInitiatorClientCredential クラスの SetCertificate メソッドを使用して、このプロパティを X.509 証明書に設定します。
X509FindType クラスの任意の列挙体を使用できます。ここでは、有効期限が切れて証明書が変更された場合に備えて、サブジェクト名を使用しています。サブジェクト名を使用することにより、インフラストラクチャは証明書を再検索できます。
クライアントでクライアント資格情報の値を構成によって指定するには
<behavior> of <endpointBehaviors> 要素を <behaviors> 要素に追加します。
<serviceCredentials> 要素を <behaviors> 要素に追加します。
name
属性 (必須) を適切な値に必ず設定してください。<clientCertificate> of <serviceCredentials> 要素を <clientCredentials> 要素に追加します。
次のコードに示すように、
storeLocation
、storeName
、x509FindType
、およびfindValue
の各属性を適切な値に設定します。証明書詳細については、 、「証明書の使用」を参照してください。<behaviors> <endpointBehaviors> <behavior name="endpointCredential"> <clientCredentials> <clientCertificate findValue="Contoso.com" storeLocation="LocalMachine" storeName="TrustedPeople" x509FindType="FindBySubjectName" /> </clientCredentials> </behavior> </endpointBehaviors> </behaviors>
クライアントを構成するときは、次のコードに示すように、
<endpoint>
要素のbehaviorConfiguration
属性を設定して動作を指定します。エンドポイント要素は <client> 要素の子です。また、bindingConfiguration
属性をクライアントのバインディングに設定することにより、バンディング構成の名前を指定します。生成された構成ファイルを使用している場合は、バインディングの名前は自動的に生成されます。この例では、名前は"tcpBindingWithCredential"
です。<client> <endpoint name ="" address="net.tcp://contoso.com:8036/aloha" binding="netTcpBinding" bindingConfiguration="tcpBindingWithCredential" behaviorConfiguration="credentialBehavior" /> </client>
関連項目
タスク
方法 : Windows Communication Foundation クライアントを作成する
リファレンス
NetTcpBinding
SetCertificate
X509CertificateRecipientServiceCredential
ClientBase
X509CertificateInitiatorClientCredential
概念
WCF セキュリティのプログラミング
資格情報の種類の選択
証明書の使用
その他の技術情報
ServiceModel Metadata Utility Tool (Svcutil.exe)
<netTcpBinding>
<security> of <netTcpBinding>
<message> element of <netTcpBinding>
<behavior> of <endpointBehaviors>
<behaviors>
<clientCertificate> of <serviceCredentials>
<clientCredentials>