WS-Addressing、WS-Security、および TLS を含む SOAP 1.1 要求を作成するように WCF クライアントを構成しようとしています。
セキュリティ要件は、メッセージにユーザー名トークン、TimeStamp が含まれていること、および含まれている BinarySecurityToken を使用して TimeStamp が署名されていることです。
次のリンクの例を使用して、WCF クライアント バインディングを作成しました。HTTPS がトランスポート メカニズムとして使用され、MessageSecurity が UsernameOverTransport に基づくように、例を少し変更しました (以下を参照)。
HttpsTransportBindingElement httpsTransport = new HttpsTransportBindingElement();
// the message security binding element will be configured to require 2 tokens:
// 1) A username-password encrypted with the service token
// 2) A client certificate used to sign the message
// Instantiate a binding element that will require the username/password token in the message (encrypted with the server cert)
TransportSecurityBindingElement messageSecurity = SecurityBindingElement.CreateUserNameOverTransportBindingElement();
// Create supporting token parameters for the client X509 certificate.
X509SecurityTokenParameters clientX509SupportingTokenParameters = new X509SecurityTokenParameters();
// Specify that the supporting token is passed in message send by the client to the service
clientX509SupportingTokenParameters.InclusionMode = SecurityTokenInclusionMode.AlwaysToRecipient;
// Turn off derived keys
clientX509SupportingTokenParameters.RequireDerivedKeys = false;
// Augment the binding element to require the client's X509 certificate as an endorsing token in the message
messageSecurity.EndpointSupportingTokenParameters.Endorsing.Add(clientX509SupportingTokenParameters);
// Create a CustomBinding based on the constructed security binding element.
return new CustomBinding(messageSecurity, httpsTransport);
このクライアントによって生成される SOAP メッセージは、呼び出しているサービスの要件をほぼ満たしています。唯一の問題は、wsa:To アドレスと TimeStamp アドレスが署名されていることです。
どの WCF ヘッダーが署名されているかを正確に指定する方法はありますか? クライアントを制限する必要があるため、TimeStamp ヘッダーのみに署名します。