1

我有一个要转换为 Grails 的 PHP 应用程序。PHP 应用程序使用盐机制来编码其所有用户的密码。

将 salt 和 salted 密码移动到 Grails 中的(自定义)用户数据库时,我无法在 Grails 应用程序中登录。

当然,我使用的是Spring Security Core 插件,并且我已经按照本教程中的说明将 salt 添加到 User 域类中,我在这里找到了: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)

(您可能还注意到添加了电子邮件,这是我使用本教程添加的)

但是我无法使用从 PHP 项目转移过来的任何用户登录。如果有任何帮助,以下是他们的密码编码方式:

$password = "password";
$salt = bin2hex( openssl_random_pseudo_bytes( 32 ) );
$passwordSalted = hash( "sha256", $salt . $password );
4

1 回答 1

1

看起来伯特在这里提出了他的建议:http: //grails.1312388.n4.nabble.com/Spring-Security-Core-plugin-and-multiple-salt-sources-tc3638236.html#a3646256

基本上,我已经从上面提到的教程中获得了自己的 salt,我只需使用自定义密码编码器将它与密码结合起来。

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;
    }
}
于 2013-03-02T16:16:35.463 回答