Я пытаюсь настроить мой клиент WCF для создания запроса SOAP 1.1, который включает в себя WS-Addressing, WS-Security и TLS.
Требования безопасности состоят в том, чтобы сообщение содержало маркер имени пользователя, TimeStamp иTimeStamp подписывается с использованием включенного BinarySecurityToken.
Я использовал пример из следующей ссылки для создания привязки моего клиента 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.