2013-03-05 75 views
0

我想設定一個cookie,使用戶可以自動登錄。散列用戶密碼中的Cookie

我不想驗證cookie時查詢數據庫會話字符串(基本上我需要做的,每當我的大部分的API調用,我想使它更快)

我找到了解決辦法是設置一個哈希在cookie中,並嘗試進行身份驗證時對其進行解密,如果解密成功,則在登錄用戶。

我想知道我應該使用什麼散列方法?我只是在我的程序中使用一個常數鹽,並將該用戶名與該鹽一起散列,將哈希用戶名和原始用戶名存儲在cookie中,並嘗試在驗證後將用戶名與解密哈希匹配?

由於我不熟悉哈希函數,任何人都可以提供一些關於如何在Java中執行它的建議嗎?

回答

1

我建議您使用爲每個會話生成的唯一令牌密鑰。例如,如果客戶端從計算機登錄後,此密碼將有效,直到密碼更改。過期cookie不完全安全...

您還可以使用會話變量進行簡單身份驗證。一旦爲用戶設置了會話變量,每當此用戶使用此會話標識發送請求時,您的會話變量將僅用於此會話ID。大多數平臺還可以使用DB爲你存儲這些變量。

+0

yes ..使用會話變量很簡單..問題是我不想查詢數據庫進行身份驗證 – 2013-03-05 15:59:00

+0

爲什麼你不想查詢數據庫?是否有爲每個請求查詢數據庫的開銷或者您不想使用數據庫?如果您未配置會話管理器以使用數據庫,則會話變量默認存儲在服務器端的進程內存中。事實上,你不需要這種情況下的數據庫。 – 2013-03-06 12:04:11

0

兩種方法:

1)創建您自己的身份驗證框架。在這種情況下,我建議在cookie中加入一個用戶名的加密值(我強烈建議不要使用散列;也請不要使用用戶密碼值)。對於加密,請使用BouncyCastle的AES-256加密: 256bit AES/CBC/PKCS5Padding with Bouncy Castle 如果您的框架成功解密cookie - 用戶已通過身份驗證。如果您的框架無法解密cookie或用戶不存在 - 用戶未通過身份驗證。

2)請考慮使用Spring Security框架: http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html 這是一個很棒的框架,解決了很多認證/授權問題。 您的問題是由「與rememberMe」功能解決: http://static.springsource.org/spring-security/site/docs/3.1.x/reference/springsecurity-single.html#ns-remember-me

最好的問候,

邁克爾

+0

感謝,但我不能使用Spring,Hibernate的也不..在首節給出的示例中,我該如何解密,如果是隨機生成的鹽? – 2013-03-05 16:14:41

+0

嗨!您可以生成每安裝一臺鹽並將其存儲在數據庫 - 在這種情況下,你將能夠使用它的cookie解密。 的產生鹽的例子是列在這裏: http://stackoverflow.com/questions/2957513/how-to-use-bouncy-castle-lightweight-api-with-aes-and-pbe 你能接受我的回答它是否符合你的要求。 – Michael 2013-03-06 09:24:38

0

我不來從Java背景,但你的哈希鍵決不應該被暴露的東西。

例如: - 在你的情況下,UserName是關鍵,並且知道你正在使用的機制的開發人員之一可以將其分解,因爲名稱是非常常見和已知的。

不知道最好的方法是什麼,但我使用了用戶界面中不可見的UserID(GUID)。

+0

但用戶id是有點兒太危險,它可以在URL公開或餅乾 – 2013-03-05 16:01:19

+0

任何靈敏的數據不應該以純文本傳遞 – 2013-03-07 02:34:18