1

Grailsに変換しているPHPアプリケーションがあります。PHPアプリケーションは、ソルトメカニズムを使用してすべてのユーザーのパスワードをエンコードしました。

ソルトおよびソルトされたパスワードをGrailsの(カスタム)ユーザーデータベースに移動すると、Grailsアプリケーションにログインしているときにログインできません。

もちろん、私はSpring Security Coreプラグインを使用しており、このチュートリアルで指定されているように、Userドメインクラスにsaltを追加しました。これはここで見つかりました:Grails with SpringSecurityPluginとSaltedPasswords

チュートリアルを実行した後、ユーザーを追加して、そのユーザーで正常にログインできます。

[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

基本的に、私はすでに上記のチュートリアルから提供された独自のソルトを持っていました。カスタムパスワードエンコーダーを使用してそれをパスワードと組み合わせる必要がありました。

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 に答える