2017-02-03 55 views
4

類似的問題。
不幸的是,微軟對WSSE Username and Token Security Spec 1.1的執行與標準不兼容,並且未發送EncodingTypeNonceWebServicesClientProtocol在安全頭添加到編碼類型杜撰

在上面的解決方案中,我鏈接的類似問題是在服務器上禁用EncodingType驗證,但我無法修改任何內容。

我已經導入WSDL作爲Web引用,我已經改變了基類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

杜撰必須有此屬性:EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary"

如何添加此屬性?我想避免手動創建請求,因爲我必須指定用戶名,密碼,BinarySecurityToken和簽名。 Microsoft.Web.Services3正在爲我創造所有必要的元素,缺少的一件事就是屬性。

編輯:

這是要求我試圖創建:

<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用戶名和令牌安全規範1.1,這是Apache CXF框架版本所要求的規範, Java Web服務正在使用。 .NET不符合該規範。幸運的是CXF中有一個標誌關掉了這個要求。我們這樣做,現在可以溝通。

+0

謝謝您的回覆,很遺憾,我無法更改WS,因爲它是由外部公司提供的,他們拒絕關閉該要求。 – Misiu