Как я могу настроить WCF только для подписи заголовка TimeStamp - PullRequest
3 голосов
/ 09 мая 2011

Я пытаюсь настроить мой клиент 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.

Ответы [ 2 ]

0 голосов
/ 14 июня 2018

Я знаю, что это старый вопрос, но меня спрашивали об этом пару раз.

Мне удалось достичь этого, указав messageVersion как Soap11 вместо Soap11WSAddressing10, а затем вручную добавив заголовки WS-Addresing, что позволило избежать необходимости вручную реализовывать механизм подписывания.

0 голосов
/ 09 мая 2011

С помощью пользовательских заголовков сообщений вы можете сделать это:

//... rest of MessageContract

[MessageHeader(ProtectionLevel = ProtectionLevel.Sign)]
string MyCustomHeader;

//... rest of MessageContract

Но я не верю, что это будет работать в вашей ситуации, поскольку вы пытаетесь подписать мыльный заголовок, который вставляется вашей пользовательской привязкой.Чтобы изменить эти заголовки, вам, вероятно, потребуется реализовать интерфейс IClientMessageInspector и добавить пользовательское поведение в конфигурацию клиента для подписи заголовка TimeStamp.Не уверен, как вы получите доступ к сертификату для подписи, но это может дать вам хорошее начало.

...