2010-08-24 77 views
5

我正在爲OpenId提供者和依賴方實現DotNetOpenAuth。在這兩種情況下,服務器都在負載平衡器後面,所以對於任何HTTP請求,我們都不能認爲我們會碰到同一臺服務器。網絡農場上的DotNetOpenAuth

看來,DotNetOpenAuth depends on the Session存儲未決的請求密鑰。由於服務器可能會在請求之間發生變化,因此我們不能依賴標準的InProc會話。不幸的是,我們無法成功實現SQL作爲Session的存儲。

我的問題是:將PendingAuthenticationRequest存儲爲客戶端cookie是否安全?比使用Session更糟糕嗎?

回答

5

ProviderEndpoint.PendingAuthenticationRequest屬性僅供您使用,主要用於簡單場景。如果它不適合你,一切意味着以另一種方式存儲它,完全忽略這個屬性。那裏沒有傷害。

最終,會話由HTTP cookie進行跟蹤,所以如果您願意,可以將驗證請求狀態完全存儲在cookie中,以便它可以在Web場環境中使用。另一種方法是不要求客戶端(或服務器)完全跟蹤狀態,方法是直接在OP端點URL處理所有內容(包括身份驗證),或者將OP端點URL中的用戶重定向到查詢字符串,該查詢字符串包含所有您需要跟蹤的狀態信息。請注意後一種方法,因爲您將向用戶公開您的狀態數據以查看並可能被篡改。

總之,您可能會也可能不會選擇將用戶會話存儲在SQL存儲中。這應該沒問題。我認爲你遇到的問題(我們通過電子郵件討論過)是,你需要實現你自己的IProviderApplicationStore,它將在所有Web服務器上共享的數據庫中存儲隨機數和關聯。這是必須做的,並且與用戶會話狀態正交,因爲它存儲在應用程序級別。

相關問題