據我所知,爲了使用basicHttpBinding的用戶名憑證對SQL Server成員資格提供者進行認證,我需要設置TransportWithMessageCredentials安全模式。但最近我看了一下WCF Security guide。在本書中,我找到了類似的例子,但是使用基本模式而不是TransportWithMessageCredentials,並且創建了一個自定義HTTP模塊來驗證用戶身份。當使用basicHttpBinding時WCF和用戶名憑據
我想知道哪種方法值得使用?
據我所知,爲了使用basicHttpBinding的用戶名憑證對SQL Server成員資格提供者進行認證,我需要設置TransportWithMessageCredentials安全模式。但最近我看了一下WCF Security guide。在本書中,我找到了類似的例子,但是使用基本模式而不是TransportWithMessageCredentials,並且創建了一個自定義HTTP模塊來驗證用戶身份。當使用basicHttpBinding時WCF和用戶名憑據
我想知道哪種方法值得使用?
兩種方法都是一樣的,但他們使用不同的方法。第一種方法使用SOAP頭來傳遞憑據,而第二種方法使用HTTP頭來傳遞憑據。
第二種方法涉及額外的網絡往返(由WCF內部處理),因爲第一次呼叫被401狀態代碼拒絕並要求基本認證,並且只有第二次調用包含具有憑證的頭部。這就是HTTP身份驗證如何工作的方式,客戶端在服務器需要它們之前不應該發送憑據(即使有可能預先認證但我認爲WCF不使用它)。第二種方法不能用於流式傳輸模式。
這兩種方法之間可能還有一個區別。第一種方法驗證每個呼叫,而第二種方法驗證連接,因此如果您從同一個代理(和同一個連接)多次呼叫該服務,則只會使用第二種方法驗證一次,但對於使用第一種方法的每次呼叫驗證。
編輯:
這兩者之間沒有偏好。您將使用更適合您需求的產品。如果您可以控制客戶端和服務器,或者您知道客戶端將使用更強大的SOAP堆棧,則第一個更容易設置。如果你不能控制你的客戶,他們可以使用不同的平臺,你可以找到更多的互操作性。作爲一個便箋,第一個僅適用於SOAP協議,而第二個適用於SOAP,POX和REST(POX和REST需要不同的綁定)。
所以,據我所知,第一種方法是首選? – andrew 2012-01-11 11:14:59
我編輯了答案。 – 2012-01-11 11:19:26
感謝您的回答! :)順便說一句,你可以看看這個問題http://stackoverflow.com/questions/8816652/wcf-and-storing-authentication-info? – andrew 2012-01-11 11:29:53