0

我试图避免在身份验证时访问数据库以提高性能

经过大量搜索后的有效解决方案似乎是将加密字符串存储在 cookie 中并尝试在身份验证时对其进行解密。

因此,我想知道以下是否是一个好主意:

  1. 通过 SSL 传输所有内容(我很懒惰..)
  2. 在我的程序中设置一个全局常量密钥
  3. 在注册和更改密码时生成一个新的随机验证字符串,将其存储在 User 对象中
  4. 生成带有验证字符串和密钥的加密验证字符串
  5. 将未加密和加密的验证字符串存储在 cookie 中
  6. 当用户尝试登录时,解密验证字符串并检查原始验证字符串

如果这是一个“好的”想法,我该如何让它发挥作用,例如:

我应该使用什么加密方法,AES-256?

如何使用 Bouncycastle 在 Java 中进行这种加密/解密?

如果这不是一个好主意,我应该怎么做才能避免在身份验证时查询数据库?

比提前!

4

1 回答 1

0

你上面描述的问题叫做“RememberMe”。解决您的问题的两种方法:

1)创建自己的身份验证框架。

身份验证成功后,将用户名的加密值放入 cookie(我强烈建议不要使用散列;也请不要输入用户密码值)。

cookie 最多应该持续 2 周。

对于加密,请在 BouncyCastle 中使用 AES-256 加密: 如何在 AES 和 PBE 中使用 Bouncy Castle 轻量级 API 请不要在 cookie 中放入任何普通值。如果您的框架成功解密 cookie – 用户已通过身份验证。如果您的框架无法解密 cookie 或 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

如果您需要任何其他说明,请告诉我。

最好的祝福,

迈克尔

于 2013-03-07T15:35:35.917 回答