【问题标题】:User Authentication by Decryption用户解密认证
【发布时间】:2013-02-20 04:33:57
【问题描述】:

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

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

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

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

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

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

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

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

比提前!

【问题讨论】:

  • 如果它回答了你的问题,你可以宣传我的答案:)

标签: authentication hash encryption


【解决方案1】:

您在上面描述的问题称为“RememberMe”。 解决问题的两种方法:

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

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

cookie 应该最多保留 2 周。

对于加密,请在 BouncyCastle 中使用 AES-256 加密: How to use Bouncy Castle lightweight API with AES and PBE 请不要在 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

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

最好的问候,

迈克尔

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-05
    • 2013-06-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多