Windows Communication Foundation (WCF) セキュリティには、トランスポート、メッセージ、および "メッセージ資格情報を使用したトランスポート" という、最も定義済みのバインディングで見られる 3 つの一般的なセキュリティ モードがあります。2 つの追加モードは、 BasicHttpBindingで見つかった "トランスポート資格情報のみ" モードと、 NetMsmqBindingにある "両方" モードの 2 つのバインドに固有です。 ただし、このトピックでは、 Transport、 Message、 TransportWithMessageCredentialの 3 つの一般的なセキュリティ モードについて説明します。
すべての定義済みバインディングでこれらのモードがすべてサポートされているわけではないことに注意してください。 このトピックでは、 WSHttpBinding クラスと NetTcpBinding クラスでモードを設定し、プログラムと構成の両方でモードを設定する方法を示します。
詳細については、「WCF セキュリティ」を参照してください。 「セキュリティの概要」、 「サービスのセキュリティ保護」、および 「サービスとクライアントのセキュリティ保護」を参照してください。 トランスポート モードとメッセージの詳細については、「 トランスポート セキュリティ と メッセージ セキュリティ」を参照してください。
コードでセキュリティ モードを設定するには
使用しているバインディング クラスのインスタンスを作成します。 定義済みのバインディングの一覧については、「System-Provided バインディング」を参照してください。 この例では、 WSHttpBinding クラスのインスタンスを作成します。
Modeプロパティによって返されるオブジェクトのSecurityプロパティを設定します。WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Transport;Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Transportまたは、次のコードに示すように、モードをメッセージに設定します。
WSHttpBinding b = new WSHttpBinding(); b.Security.Mode = SecurityMode.Message;Dim b As New WSHttpBinding() b.Security.Mode = SecurityMode.Messageまたは、次のコードに示すように、メッセージ資格情報を使用して転送するようにモードを設定します。
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
構成で Mode プロパティと 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 プロトコルでは、HTTP (HTTPS) 経由で Secure Sockets Layer (SSL) が使用されます。 したがって、トランスポート セキュリティ オブジェクト (ClientCredentialType など) の HttpTransportSecurity プロパティの設定は無視されます。 つまり、メッセージ セキュリティ オブジェクトの ClientCredentialType のみを設定できます ( WSHttpBinding バインディングの場合は、 NonDualMessageSecurityOverHttp オブジェクト)。
詳細については、「 方法: トランスポート セキュリティとメッセージ資格情報を使用する」を参照してください。