2013-08-29 130 views
0

我在第三方的WCF服務上遇到了一些驗證問題。我不知道它是如何配置的,對我來說就像一個黑匣子。我知道的唯一一件事,那些web服務應該使用基本身份驗證,但可能不會。使用BasicHttpBinding和授權標頭的WCF服務身份驗證

我已經添加了fiddler,甚至wireshark來分析這些請求中發生了什麼,並發現請求與authorization標頭確實得到驗證。所以基本上,使用SoapUI我可以在這些WCF服務上進行身份驗證。

我已經生成使用svcutil測試客戶端和這樣的指定配置文件:

<bindings> 
    <basicHttpBinding> 
    <binding name="BasicHttpBinding_1" useDefaultWebProxy="false" > 
     <security mode="Message" > 
     <message clientCredentialType="UserName" /> 
     </security> 
    </binding>   
    </basicHttpBinding> 
</bindings> 
<client> 
    <endpoint address="http://theurl.svc" 
    binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_1" 
    contract="CA_TestMediaSaturn.IDCIntegration" name="BasicHttpBinding_2" /> 
</client> 

而且我在代碼文件中添加授權信息到客戶端:

client.ClientCredentials.UserName.UserName = "one"; 
client.ClientCredentials.UserName.Password = "two"; 

但我沒無法獲得在base64中編碼的頭文件。 我不知道如何配置我的客戶端來獲取這些頭以獲得Web服務端的授權。我確實發現了一個article描述如何自己做。但也許有辦法讓它變得更容易?

更新1:

我從第三方供應商只是接收器服務配置設置。 Mb它可以以某種方式幫助找出錯誤的原因。

<bindings> 
<basicHttpBinding> 
<binding name="BasicHttpBinding_1" > 
       <security mode="TransportCredentialOnly"> 
        <message clientCredentialType="UserName"/> 
       </security> 
       </binding> 
</basicHttpBinding> 
</bindings> 

回答

2

您應該設置mode =「Transport」而不是「Message」。這將生成授權標題。當前設置是消息安全性,因此身份驗證在SOAP內部。

編輯:好像你需要預先驗證。 一般wcf將首先不發送授權頭,如果服務返回一個挑戰,那麼它將再次發送帶有頭的消息。一些服務器不支持這種挑戰機制,並且需要在第一次啓動時發送授權頭。這在.net 2中被稱爲預認證。不幸的是,wcf不支持它。但你可以自己做:首先將安全模式設置爲無,這樣WCF根本不會發送安全性。然後請參見example here如何將此頭自己添加到wcf調用。

+0

我應該在綁定配置部分添加''字符串嗎? –

+0

順便說一句,使用傳輸級別需要https連接,但我的第三方的服務是http,我可以以某種方式解決它嗎? –

+1

你可以設置mode =「TransportCredentialOnly」,然後憑證類型爲「基本」 –