我正在使用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);
}
如果这个问题很奇怪,请耐心等待,并提前感谢。
答案 0 :(得分:0)
哈希函数的目的是不可加密。所以不,它不能被解密。要实现这两个目标,您可以配置其他领域。一个用于电子邮件激活,另一个用于oauth登录。
对于电子邮件激活,您可以创建临时帐户,创建一些随机激活令牌并发送电子邮件。然后,用户单击激活链接,应用程序尝试使用http请求中提供的令牌对用户进行身份验证:
String token = //get from request
subject.authenticate(new ActivationToken(token));
激活领域检查此令牌是否有效。如果有效,它会从帐户中删除令牌并对其进行身份验证。
对于facebook领域,你可以使用outh认证步骤获得的秘密来获取用户信息,如果没有erros认证用户。
答案 1 :(得分:0)
默认情况下,来自UsernamePasswordToken的密码进行散列并将结果与来自DB的散列进行比较。 你可以改变你的境界。没有制作哈希。
对于通常的登录,您可以创建密码哈希并将其放入UsernamePasswordToken。而在领域只比较哈希