2010-03-23 66 views
5

我們有一個主要由不需要維護其狀態的應用程序使用的REST應用程序,因此直到最後,我們一直保持安靜「RESTFUL」而不保持狀態。我們使用私有/公共(類似於亞馬遜)進行身份驗證。目前,客戶端通過每個請求的憑證在REST應用程序中維護會話的方式

現在我們有一個新的要求,我們必須維護狀態(或對話)。客戶端可以是豐富的應用程序或手持設備。我試圖用最好的方式來實現狀態。我們應該傳遞一個會話ID並保持該ID ..是最好的和唯一的解決方案?

+2

爲什麼RIA或手持設備不能維護會話並從REST服務器獲取資源?爲什麼要打破REST的核心規則?爲什麼不推動它所屬的狀態會話 - 在人機界面中? – 2010-03-23 19:20:41

+0

很好的問題,你有沒有好的證書是通過每個請求發送證書,然後進行身份驗證..這似乎是團隊中一些我的傢伙的決定因素 – romanianGeek 2010-03-23 20:13:21

+0

身份驗證可以很容易地緩存服務器端並造成幾乎爲零的性能損失。 – Gandalf 2010-03-23 20:15:06

回答

3

傳遞會話ID不是唯一的方法,也不是維持會話狀態的最佳方式。最好的方法是,如果你有一個RIA,就可以在的客戶端本身上維護其所屬的狀態,如一些評論所暗示的。這意味着每個請求仍然發送憑證。

對每個請求重新認證是唯一的方法,如果您覺得服務器性能受到影響,服務器可以(如建議)在一段時間內緩存認證請求的結果。 Digest authentication可能有助於避免緩存響應通過加密簽署通過電線的令牌。

如果這還不夠好,你可以使用類似於Google ClientLogin的東西,併爲客戶端提供一個加密的令牌,可以在不需要授權的情況下進行驗證,也不需要通過網絡傳遞用戶的真實憑據。通過https登錄Google,然後通過http使用生成的令牌。它在令牌的整個生命週期內對重播攻擊是開放的。

+0

+1用於指向摘要式身份驗證的鏈接。 – Triztian 2011-04-28 16:30:30