我想與我無法控制的Java Web服務進行通信,並且嘗試創建一個可以工作的綁定。使用WCF將WS-Security憑據添加到SOAP標頭
- 時間戳沒有在頭允許的,所以爲了使用
includeTimestamp="false"
屬性,我必須使用一個<customBinding>
。 - 他們使用MTOM,所以我必須使用
<mtomMessagingEncoding>
元素。
這裏是我的<bindings>
元素:
<bindings>
<customBinding >
<binding name="MyBindingName" >
<mtomMessageEncoding />
<transactionFlow />
<security authenticationMode="UserNameOverTransport"
includeTimestamp="false">
</security>
</binding>
</customBinding>
</bindings>
的SOAP Web服務需要郵件標題採用以下格式:
<soap:Envelope ... >
<soap:Header ... >
<wsse:UsernameToken>
<wsse:Username>doo</wsse:Username>
<wsse:Password Type="wsse:PasswordText">fuss</wsse:Password>
</...>
</...>
</...>
我來最接近的是:
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://www.w3.org/2005/08/addressing"
xmlns:u="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
<s:Header>
<a:Action s:mustUnderstand="1"></a:Action>
<a:MessageID>urn:uuid:a368e205-a14d-4955-bf75-049cdd3a78c0</a:MessageID>
<a:ReplyTo>
<a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">https://blablabla</a:To>
<o:Security s:mustUnderstand="1"
xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<o:UsernameToken u:Id="uuid-0f1e399b-31a8-4e00-a57f-277c21e94879-1">
<o:Username><!-- Removed--></o:Username>
<o:Password><!-- Removed--></o:Password>
</o:UsernameToken>
</o:Security>
</s:Header>
我確定我錯過了什麼這裏的瑣碎和愚蠢,但對於我的生活,我無法弄清楚它可能是什麼。
當您使用「添加服務參考」時會發生什麼? –
@JohnSaunders - 我確實使用了「添加服務引用」,但WSDL不包含任何ws安全信息。 –
令人驚訝的是,沒有得到WSDL的組織的數量意味着要描述該服務。這有什麼解釋嗎?就像,也許安全是由服務之外的東西實現的? –