Windows Communication Foundation (WCF) のセキュリティには、トランスポート、メッセージ、"メッセージ資格情報付きトランスポート" という 3 つの共通のセキュリティ モードがあり、ほとんどの定義済みバインディングで使用されています。これ以外に、2 つのバインディングに固有の 2 つのモードがあります。BasicHttpBinding の "トランスポート資格情報専用" モードと、NetMsmqBinding の "両方" モードです。 ここでは、3 つの共通のセキュリティモードである Transport、Message、および TransportWithMessageCredential に重点を置いて説明します。
ただし、これらのモードがすべての定義済みバインディングでサポートされるわけではありません。 ここでは、WSHttpBinding クラスと NetTcpBinding クラスでモードを設定し、プログラムと構成の両方を使用してモードを設定する方法を示します。
詳細については、WCF のセキュリティに関するページ、セキュリティの概要に関するページ、「サービスのセキュリティ保護」、「サービスおよびクライアントのセキュリティ保護」を参照してください。 トランスポート モードとメッセージの詳細については、「トランスポート セキュリティ」とメッセージのセキュリティに関するページを参照してください。
コードでセキュリティ モードを設定するには
使用しているバインディング クラスのインスタンスを作成します。 定義済みバインディングの一覧については、「システム標準のバインディング」を参照してください。 この例では、WSHttpBinding クラスのインスタンスを作成します。
Modeプロパティから返されるオブジェクトのSecurityプロパティを設定します。WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Transport;Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Transportまたは、モードを Message (メッセージ) に設定します。コードは次のようになります。
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Message;Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Messageまたは、モードを TransportWithMessageCredential (メッセージ資格情報付きトランスポート) に設定します。コードは次のようになります。
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.TransportWithMessageCredential;Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.TransportWithMessageCredential次のコードに示すように、バインディングのコンストラクターでモードを設定することもできます。
WSHttpBinding b = new WSHttpBinding(SecurityMode.Message);Dim b As New WSHttpBinding(SecurityMode.Message)
ClientCredentialType プロパティの設定
モードを上記の 3 つの値のいずれかに設定すると、ClientCredentialType プロパティの設定方法が決まります。 たとえば、WSHttpBinding クラスを使用し、モードを Transport に設定した場合、ClientCredentialType クラスの HttpTransportSecurity プロパティを適切な値に設定する必要があります。
トランスポート モードの ClientCredentialType プロパティを設定するには
バインディングのインスタンスを作成します。
ModeプロパティをTransportに設定します。ClientCredentialプロパティに適切な値を設定します。 プロパティをWindowsに設定するコードを次に示します。WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Transport; b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows;Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Transport b.Security.Transport.ClientCredentialType = HttpClientCredentialType.Windows
メッセージ モードの ClientCredentialType プロパティを設定するには
バインディングのインスタンスを作成します。
ModeプロパティをMessageに設定します。ClientCredentialプロパティに適切な値を設定します。 プロパティをCertificateに設定するコードを次に示します。WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Message; b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate;Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Message b.Security.Message.ClientCredentialType = MessageCredentialType.Certificate
構成でモードと ClientCredentialType プロパティを設定するには
構成ファイルの <bindings> 要素に適切なバインディング要素を追加します。 次の例では、<wsHttpBinding> 要素を追加しています。
<binding>要素を追加し、name属性に適切な値を設定します。<security>要素を追加し、mode属性をMessage、Transport、またはTransportWithMessageCredentialに設定します。モードを
Transportに設定した場合は、<transport>要素を追加し、clientCredential属性を適切な値に設定します。モードを "
Transport"に設定し、clientCredentialType要素の<transport>属性を "Windows"に設定する例を次に示します。<wsHttpBinding> <binding name="TransportSecurity"> <security mode="Transport" > <transport clientCredentialType = "Windows" /> </security> </binding> </wsHttpBinding >または、
security modeを "Message"に設定し、その後に<"message">要素を指定します。 この例では、clientCredentialTypeを "Certificate"に設定しています。<wsHttpBinding> <binding name="MessageSecurity"> <security mode="Message" > <message clientCredentialType = "Certificate" /> </security> </binding> </wsHttpBinding >次に説明する TransportWithMessageCredential 値は、特殊なケースで使用されます。
TransportWithMessageCredential の使用
セキュリティ モードを TransportWithMessageCredential に設定した場合、トランスポート レベルのセキュリティを提供する実際の機構はトランスポートによって決まります。 たとえば、HTTP プロトコルでは SSL (Secure Sockets Layer) over HTTP (HTTPS) を使用します。 このため、トランスポート セキュリティ オブジェクト (ClientCredentialType など) の HttpTransportSecurity プロパティを設定しても無視されます。 つまり、メッセージ セキュリティ オブジェクト (ClientCredentialType バインディングの場合は WSHttpBinding オブジェクト) の NonDualMessageSecurityOverHttp だけを設定できます。
詳細については、「方法: トランスポート セキュリティとメッセージ資格情報を使用する」を参照してください。