1

我正在使用 Shiro 来保护我的应用程序,现在的问题是如何在以下情况下使用散列密码登录:

1、用户点击激活邮件后自动登录。

2,通过Facebook登录,通过facebookId从数据库中找到用户,然后尝试登录,但我只有散列密码,我们有什么方法可以解密散列密码。

这是我如何加密存储在数据库中的密码:

new Sha256Hash(password).toHex()

下面是我的登录代码。

Subject currentUser = SecurityUtils.getSubject();
if (!currentUser.isAuthenticated()) {
    UsernamePasswordToken token = new UsernamePasswordToken(email, password, rememberMe);
    currentUser.login(token);
}

如果这个问题很奇怪,请耐心等待,并提前感谢。

4

2 回答 2

0

哈希函数的目的是不可解密。所以不,它不能被解密。要实现这两个目标,您可以配置其他领域。一个用于电子邮件激活,另一个用于 oauth 登录。

对于电子邮件激活,您可以创建临时帐户,创建一些随机激活令牌并发送电子邮件。然后用户单击激活链接,应用程序尝试使用 http 请求中提供的令牌对用户进行身份验证:

String token = //get from request
subject.authenticate(new ActivationToken(token));

激活领域检查此令牌是否有效。如果有效,它将从帐户中删除令牌并对其进行身份验证。

至于 facebook 领域,您可以使用通过身份验证步骤获得的秘密来获取用户信息,如果没有错误身份验证用户。

于 2013-04-09T19:38:36.913 回答
0

默认情况下,来自 UsernamePasswordToken 的密码经过哈希处理,并将结果与​​来自 DB 的哈希值进行比较。你可以改变你的境界。不做哈希。

对于通常的登录,您可以对密码进行哈希处理并放入 UsernamePasswordToken。在领域中只比较哈希

于 2014-03-01T18:34:20.523 回答