2011-04-14 81 views
0

我現在正在使用安全性,並且必須在我的Web呼叫之前設置ClientCredentials。避免爲每個Web呼叫設置客戶端憑證

這是一件重複的事情,因爲我有很多網絡電話總是傳遞相同的東西。

避免做這種事情的好方法是什麼?

回答

2

WCF實現WS-SecureConversation。這允許客戶端只傳遞一次證書,隨後的調用將自動使用由客戶端和服務之間的安全對話握手生成的安全令牌。在WCF中,這稱爲安全上下文或安全會話,默認情況下它通常在wsHttpBinding中打開。當使用安全上下文您必須遵守的基本規則:

  • 您的服務becames每個會話實例化,因此是長期生活服務實例,你必須處理有關創建
  • 安全會話的會話過期等所有的缺點和問題在單個客戶端代理實例和服務實例之間,因此只有在使用相同的代理時纔有效。如果您創建新代理,則必須再次發送憑證以啓動安全對話。
  • 由於建立安全上下文,對服務的首次調用速度較慢。

如果你不遵循這一方法,您可以例如實現自定義的SOAP頭和消息inspetor其中將包括在客戶端頭和檢查服務器端的頭。此解決方案完全位於WCF安全管道之外,不能與WCF中的通用用戶名和密碼組合。您也必須分別發送用戶名和密碼。

如果您想在WCF管道中包含自定義解決方案,您可能需要非常複雜的任務,因爲將此類解決方案集成到WCF安全管道需要自定義授權策略,cutom令牌,令牌管理器,令牌驗證器,令牌解析器和客戶端憑據。

但是,據我瞭解您的問題,您不喜歡在每次通話之前設置憑證 - 這意味着您爲每次通話使用新代理。因此,您將編寫大量代碼,這將導致您無需爲隨後的調用設置用戶名和密碼,但必須設置將在服務上驗證的自定義令牌。您還必須在服務上管理這些令牌。

它應該可能更容易創建一些包裝器來調用Web服務,它將設置用戶名和密碼。

1

好的模式是在授權後將會話令牌從服務發送到客戶端,然後使用每次呼叫而不是憑據發送它。

+0

知道一篇文章,證明這一點? – zachary 2011-04-14 18:35:41

+0

@zachary我們做得非常簡單。我們所有的DataContract都來自某個具有該令牌的類。加上添加認證操作,將返回該令牌。 – Andrey 2011-04-14 18:55:47

+0

爲了進一步闡明,通常會有一個登錄和註銷方法,並且登錄返回令牌。 – 2011-04-14 20:01:09