2015-12-15 64 views
0

我使用WS-Security向外部Web服務發出請求。形式SoapUI它一切正常。從.Net(C#)它不。類型屬性的Webservice WS-Security名稱空間

我發現請求中的差異是安全標頭中Type屬性的命名空間。

從soapUI的所述標頭包含:

<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-90bae2a1-88a9-4b4c-b84e-9244d3576051-7"> 
      <o:Username>******</o:Username> 
      <o:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">******</o:Password> 
     </o:UsernameToken> 
    </o:Security> 

從.NET(C#)的XML是這樣的:

<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-90bae2a1-88a9-4b4c-b84e-9244d3576051-7"> 
      <o:Username>******</o:Username> 
      <o:Password o:Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">******</o:Password> 
     </o:UsernameToken> 
    </o:Security> 

問題是服務器不接受所述O:在類型密碼元素的屬性。

首先:服務器是否應該在Type屬性中接受o:

第二個(也是更重要的):有沒有辦法從Type屬性中刪除o:因爲我沒有控制web服務?

在C#中,我使用帶有TransportWithMessageCredential安全模式的basicHttpBinding。

回答

0

There's a thread on Connect - from 8 years ago! - 它引用了同樣的問題:

當我的應用程序服務器嘗試驗證這一點,它失敗了 消息有關密碼的類型屬性。名稱空間聲明的出現似乎會導致架構驗證失敗。

的響應是:

WCF不幸生成令牌不當。一個bug已被 提交。

您有解決方法

1)更易於設置WSSecurityTokenSerializer.EmitsBspRequiredAttribute = false幾個選項。這將完全抑制Type屬性,在這種情況下, 默認爲

http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText。 這就是您當前指定的內容,但您需要確保 服務期望該默認設置,並且不需要指定其他任何內容。

2)更難編寫用戶名令牌的自定義序列化程序,以糾正 這種行爲。

在線程稍後會有一個串行器的例子。

相關問題