2009-09-16 28 views
22

我想創建一個Web服務體系結構,可以通過各種平臺調用,例如移動設備,winforms應用程序,iphone,黑莓,您可以將其命名。因此,使用WCF和wsHttp綁定之類的東西可能會導致這種情況,我需要降級到basicHttp綁定以實現兼容性。創建TOKEN系統以驗證Web服務調用的最佳方法?

這樣說的話,我需要一個系統在初始登錄(認證)時生成一個令牌,然後使用這個令牌來進行所有後續調用,我想可以驗證身份驗證並允許該方法執行。

任何人有關於如何去做這件事的提示或建議? 1)生成一個令牌以及安全令牌中涉及的內容? 2)令牌有多長時間,有些用戶可能使用他們的應用幾個小時甚至可能「睡眠」他們的計算機

謝謝你的建議。

+1

我的問題是更多的是什麼是最好的方式來回運輸這個令牌來回,並與所有的電話,而不是如何認證。一旦服務器生成這個令牌(序列化類),將其附加到所有後續調用的最佳方式是什麼?作爲方法的一個參數,或者它可以作爲頭文件或其他東西附加,因此它對所有方法都是透明的(服務契約) – Neal 2010-01-25 00:21:10

回答

15

如果您只使用服務器在初始身份驗證時給出的一個令牌,則可以在任何請求被攔截時使用該令牌。你唯一的防禦是到期時間。

除此之外,它取決於你的實現選項。

更安全的系統是爲每個請求添加一個時間戳(也可能是一個隨機數),簽名幷包含每​​個請求。它要求客戶端處理認證憑證,瞭解簽署實施並簽署每個請求。

您可以交替地讓服務器對每個請求進行身份驗證(可以使用OpenID完成),或者在需要更多數據時(可以使用OAuth完成)分發多個令牌並重新進行身份驗證。如果客戶端可以存儲憑證,則用戶可以看不到這些憑證。這些更加複雜,需要一些加密傳輸(例如用於某些交互的SSL),以及可以說HTTP重定向並處理Cookie或其他存儲狀態的客戶端。客戶不必知道如何簽名,但如果你可以做SSL,你可能不需要首先考慮複雜性。

如果您不需要客戶端不可知,您可能需要簽名請求。

對於簽署實現,示例和庫,請查看Amazon Web Services,OpenID或OAuth。

關於令牌過期時間,這取決於您的需求。較長的令牌壽命會增加窗口重播攻擊。一個隨機數使令牌一次性使用,但在服務器上需要更多的狀態。

3

您應該檢出OAuth。這是API認證的標準,您可能只需將現有的實施插入到您的服務中即可。

+0

OAuth協議允許您根據自己的喜好設置參數。我建議你看看一些服務提供商,看看他們用OAuth做了什麼。 http://wiki.oauth.net/ServiceProviders – 2009-09-16 18:40:23

相關問題