3

カスタムJDBCレルムでApacheShiroを使用して、ユーザーのソルト、パスワード、ハッシュアルゴリズム名、およびハッシュ反復回数をデータベースから取得しています。これらはすべて個別の列として格納されています。

問題は、PasswordMatcherを使用してユーザーのパスワードがデータベースに保存されているものと一致することを確認するときに、データベースから取得したソルトをどのように処理する必要があるかわからないことです。

HashedCredentialsMatcherを使用する場合、ソルトはsetCredentialsSaltメソッドを使用して設定されますが、HashedCredentialsMatcherの代わりにPasswordMatcherを使用する場合はそうではないようです。

カスタムJDBCレルムで使用しているコードは次のとおりです

@Override 
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { 

        //code to retrieve user details from database removed for brevity 

        SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(username, passwdSalt.password, getName()); 
        info.setCredentialsSalt(new SimpleByteSource(passwdSalt.salt)); 

        DefaultPasswordService passwordService = new DefaultPasswordService(); 
        DefaultHashService hashService = new DefaultHashService(); 
        PasswordMatcher passwordMatcher = new PasswordMatcher(); 

        hashService.setHashAlgorithmName(passwdSalt.hashAlgorithmName); 
        hashService.setHashIterations(passwdSalt.hashIterations); 
        passwordService.setHashService(hashService); 
        passwordMatcher.setPasswordService(passwordService); 
        setCredentialsMatcher(passwordMatcher); 

        return info; 
} 

コードをステップスルーした結果、データベース内のハッシュされたパスワードと照合するためにユーザーが入力したパスワードをハッシュするときにソルトが使用されていないことが問題の原因であることを確認しました。DefaultPasswordService.javaで、メソッドpasswordsMatch(Object submitdPlaintext、String saved)が160行目で呼び出されると、指定されたオブジェクトrequestには次のものが含まれます。

algorithmName=null 
iterations=0 
salt=null 
source=cGFzc3dvcmQ= 

161行目のコードの次の行はcomputeHash(request)

DefaultHashService.javaで、メソッドcomputeHash(HashRequest request)が呼び出されたとき、155行目と157行目で、変数algorithmNameとiterationsがそれぞれに正しく設定されSHA-2561います。159行目でメソッドgetPublicSalt(request)が呼び出されましたが、nullに戻ります。

他の誰かがShiroのPasswordMatcherをカスタムレルムで使用したことがありますか?Shiroにソルトを使用するようにどのように指示しますか?

4

3 に答える 3

1

Shiroメーリングリストにメッセージを投稿したところ、PasswordMatcherはデフォルトでauthenticationInfo.getCredentials()以外のAuthenticationInfoを参照しないという返信がありました。

詳細については、メーリングリストのアーカイブメッセージはhttp://shiro-user.582556.n2.nabble.com/Migrating-from-HashedCredentialMatcher-to-PasswordMatcher-td7577808.htmlで入手できます。

于 2012-10-15T19:39:20.703 に答える
0

私のプロジェクトの1つでこのURLを探すのにしばらく時間がかかりました-http ://meri-stuff.blogspot.com/2011/04/apache-shiro-part-2-realms-database-and.html

記事はこのファイルにリンクしていますJNDIAndSaltAwareJdbcRealm

プロジェクトでそのクラスを正常に使用して、パスワードハッシュでsaltを使用しました。

HTH

于 2012-09-25T19:45:55.917 に答える
0

Shiroコマンドラインハッシャーによって作成された資格情報をShiro1CryptFormatに保存するDefaultPasswordServiceと、レルムでを使用できます。

        final PasswordMatcher passwordMatcher = new PasswordMatcher();
        passwordMatcher.setPasswordService(new DefaultPasswordService());
        realm.setCredentialsMatcher(passwordMatcher);
于 2017-07-20T21:44:16.533 に答える