2010-08-30 57 views
3

當用戶登錄時(通過開放標識),我們正在創建一個名爲「UID」的會話變量並在其中存儲唯一的用戶標識。稍後我們正在檢查會話以查看用戶是否已登錄。我認爲這不是正確的方式,但我不能強制團隊改變這一點,因爲我無法展示如何破解此實現。任何人都可以告訴我爲什麼(如果是的話)這個實現是不好的?在會話變量中存儲用戶標識

回答

3

我看不到任何情況,您應該擔心通過客戶端漏洞獲取服務器端會話值。由於缺乏OpenID的身份,一些人擔心虛假OpenID提供商欺騙用戶進入傳遞憑證,但通常沒有保證。

的實施似乎是可以接受的,但考慮到你正在使用ASP.NET,你應該考慮使用的IIdentity這ASP.NET OpenID提供商:

http://code.google.com/p/dotnetopenid/

它是行之有效的,具有相當多的安全代碼和API支持內置到它。

+0

謝謝。另外我正在使用MVC – Tanmoy 2010-08-31 04:16:17

0

正如Nissan Fan所言,我可以看到沒有理由擔心服務器端會話值被利用。

只是出於好奇,你認爲這不是正確的路要走的一些理由是什麼?

1

我的第一個問題是,是什麼讓你覺得這不是正確的方法?

以這種方式存儲數據是非常普遍的,安全的,它專門針對用戶本地化。如果您不喜歡使用會話出於其他原因,例如處理多個服務器上的會話,或者需要將會話序列化/反序列化到數據存儲區(假設非內存會話),那麼這是一個不同的爭論,但安全部分不應該「這是問題。

還要記住使用會話的簡單性。它使數據訪問您需要不斷訪問的,用戶特定的數據,在整個應用程序中保持標準和一致。

編輯基於評論:

我想知道同樣的事情,當我開始使用MVC以及和它似乎是完全罰款。我無法找到任何反對這個想法的東西。我甚至問this question,因爲我的自定義授權屬性必須訪問會話,並且我在其中存儲了特殊的角色類型,現有的授權不太適合。

+0

我同意存儲數據是正確的。但是,我們在這裏存儲用戶的唯一ID並檢查該值以查看用戶是否已通過身份驗證。 Like if(Session [「UID」]!= null)//用戶已登錄。我們在註銷時清除此值。這很好嗎? – Tanmoy 2010-08-31 04:09:27

+0

另外我們正在使用MVC。所以,當我們調用一個動作時,我們將它裝飾爲授權屬性。這裏我們沒有使用該屬性並手動檢查UID會話變量。從你的觀點來看,我可以看到它是安全的,但它是檢查用戶是否被認證的方式?爲了最佳實踐。 – Tanmoy 2010-08-31 04:14:37