我有一个PHP应用程序,我正在转换为Grails。 PHP应用程序使用salt机制来编码其所有用户的密码。
将盐和盐渍密码移动到Grails中的(自定义)用户数据库时,我无法在Grails应用程序中登录。
当然,我正在使用Spring Security Core plugin,并且我已经在this tutorial中指定的用户域类中添加了salt,我在此处找到了Grails with Spring Security Plugin and Salted Passwords
完成本教程后,我可以添加用户并成功登录该用户:
[BootStrap.groovy]:
new User( username:"user", email:"user@place.com", password:"password", enabled:true).save(flush: true)
(您可能还会注意到我添加了使用this tutorial添加的电子邮件)
但我无法使用从PHP项目转移的任何用户登录。如果它有任何帮助,这里是他们的密码编码方式:
$password = "password";
$salt = bin2hex( openssl_random_pseudo_bytes( 32 ) );
$passwordSalted = hash( "sha256", $salt . $password );
答案 0 :(得分:1)
看起来伯特在这里提出了他的建议:http://grails.1312388.n4.nabble.com/Spring-Security-Core-plugin-and-multiple-salt-sources-tc3638236.html#a3646256
基本上,我已经从上面提到的教程中提供了自己的盐,我只需要使用自定义密码编码器将其与密码结合使用。
public class CustomPasswordEncoder extends MessageDigestPasswordEncoder {
public CustomPasswordEncoder() {
super("SHA-256");
}
@Override
protected String mergePasswordAndSalt(String password, Object salt, boolean strict) {
if (password == null) {
password = "";
}
if (salt == null || "".equals(salt)) {
return password;
}
return salt + password;
}
}