2017-02-03 11 views
4

Похожие вопросы: How do I add an EncodingType attribute to the Nonce element of a UsernameToken in WSE 3.0 (.NET)WebServicesClientProtocol добавить EncodingType в Nonce в заголовке безопасности

Я пытаюсь изменить заголовок, который передается с помощью WebServicesClientProtocol в обслуживании.
К сожалению, реализация Microsoft WSSE Username and Token Security Spec 1.1 несовместима со стандартом и не отправляет EncodingType с Nonce.

В подобном вопросе я связал сверху решение было отключить проверку на сервере EncodingType, но я ничего не могу изменить.

Я импортировал WSDL в качестве веб-ссылки, я изменил базовый класс для WebServicesClientProtocol

Тогда в моем коде я это делаю:

var client = new QueryClient(); 

SoapContext requestContext = client.RequestSoapContext; 
requestContext.Security.Timestamp.TtlInSeconds = 60; 
var userToken = new UsernameToken(_userName, _password, PasswordOption.SendHashed); 
requestContext.Security.Tokens.Add(userToken); 
X509SecurityToken signatureToken = GetSecurityToken(); 
requestContext.Security.Tokens.Add(signatureToken); 
MessageSignature sig = new MessageSignature(signatureToken); 
requestContext.Security.Elements.Add(sig); 
client.SetClientCredential(signatureToken); 
client.SetClientCredential(new UsernameToken(_userName, _password, PasswordOption.SendHashed)); 

это создает запрос, который является почти идеальным, но Нонс не получил EncodingType:

Nonce должен иметь этот атрибут: EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"

Как добавить этот атрибут? Я хотел бы избежать создания вручную запроса, потому что я должен указать Username, Password, BinarySecurityToken и Signature. Microsoft.Web.Services3 создает для меня все необходимые элементы, одна вещь отсутствует - это атрибут.

EDIT:

Это запрос, который я пытаюсь создать:

<soap:Envelope xmlns:dz="http://dom.query.api.com" xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://dz.api.swd.zbp.pl/xsd"> 
    <soap:Header> 
     <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
      <wsse:UsernameToken wsu:Id="UsernameToken-E94CEB6F4708FB7C23148611494797612"> 
       <wsse:Username>my_login</wsse:Username> 
       <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">XqEwZ/CxaBfFvh487TjvN8qD63c=</wsse:Password> 
       <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">JzURe0CxvzRjmEcH/ndldw==</wsse:Nonce> 
       <wsu:Created>2017-02-09T09:42:27.976Z</wsu:Created> 
      </wsse:UsernameToken> 
      <wsse:BinarySecurityToken EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509PKIPathv1" wsu:Id="X509-E94CEB6F4708FB7C2314861149479517">MIIKnDCCB.........nmIngeg6d6TNI=</wsse:BinarySecurityToken> 
      <ds:Signature Id="SIG-E94CEB6F4708FB7C23148611494795311" xmlns:ds="http://www.w3.org/2000/09/xmldsig#"> 
       <ds:SignedInfo> 
        <ds:CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"> 
         <ec:InclusiveNamespaces PrefixList="dz soap xsd" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
        </ds:CanonicalizationMethod> 
        <ds:SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/> 
        <ds:Reference URI="#id-E94CEB6F4708FB7C23148611494795310"> 
         <ds:Transforms> 
          <ds:Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"> 
           <ec:InclusiveNamespaces PrefixList="dz xsd" xmlns:ec="http://www.w3.org/2001/10/xml-exc-c14n#"/> 
          </ds:Transform> 
         </ds:Transforms> 
         <ds:DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/> 
         <ds:DigestValue>mlABQuNUFOmLqsDswxXxQ6XnjpQ=</ds:DigestValue> 
        </ds:Reference> 
       </ds:SignedInfo> 
       <ds:SignatureValue>lYhBHSQ/L...XL1HEbMQjJ/Q2Rvg==</ds:SignatureValue> 
       <ds:KeyInfo Id="KI-E94CEB6F4708FB7C2314861149479518"> 
        <wsse:SecurityTokenReference wsse11:TokenType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509PKIPathv1" wsu:Id="STR-E94CEB6F4708FB7C2314861149479519" xmlns:wsse11="http://docs.oasis-open.org/wss/oasis-wss-wssecurity-secext-1.1.xsd"> 
         <wsse:Reference URI="#X509-E94CEB6F4708FB7C2314861149479517" ValueType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-x509-token-profile-1.0#X509PKIPathv1"/> 
        </wsse:SecurityTokenReference> 
       </ds:KeyInfo> 
      </ds:Signature> 
     </wsse:Security> 
    </soap:Header> 
    <soap:Body wsu:Id="id-E94CEB6F4708FB7C23148611494795310" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
     <dz:query> 
      <dz:param> 
       <xsd:userQueryId>27467</xsd:userQueryId> 
      </dz:param> 
     </dz:query> 
    </soap:Body> 
</soap:Envelope> 

Я отправить свой запрос на обслуживание создателя, и он подтверждает, что все, что мне нужно, что EncodingType атрибут Nonce

ответ

0

Флаг EncodingType соответствует значению WSSE Username и Token Security Spec 1.1, которое является спецификацией, требуемой версией инфраструктуры Apache CXF, используется веб-служба Java. .NET не соответствует этой спецификации. К счастью, в CXF появился флаг, чтобы отключить это требование. Мы сделали это и теперь можем общаться.

+0

Спасибо за ответ, к сожалению, я не могу изменить WS, потому что он доставлен внешней компанией, и они отказались отключить это требование. – Misiu