MD5(username + password)を含むデータベースにパスワードフィールドがあります。私はこれをSpring Security + JdbcAuthenticationにどのように実装しますか?私はこれがどんな手段でも安全ではないことを知っていますが、それは私が話す必要があるレガシーデータベースです。現在のコードは次のようになります。スプリングブートセキュリティ4カスタムPasswordEncoder
auth.jdbcAuthentication()
.dataSource(dataSource)
.usersByUsernameQuery("select login, password, 1 as enabled from
login where login=?")
.authoritiesByUsernameQuery("select login,role" +
" from login lo" +
" join login_role lor on lo.login_id = lor.login_id" +
" join role gr on lor.role_id = gr.role_id" +
" where login=?")
パスワードとしてハッシュ値を送信すると、認証が機能します。私はいくつかのパスワードエンコーダを設定する必要があると思う。あなたは
@Autowired
public void configAuthentication(AuthenticationManagerBuilder auth)
throws Exception {
auth.jdbcAuthentication().dataSource(dataSource)
.passwordEncoder(passwordEncoder())
.usersByUsernameQuery("sql...")
.authoritiesByUsernameQuery("sql...");
}
@Bean
public PasswordEncoder passwordEncoder(){
PasswordEncoder encoder = new BCryptPasswordEncoder();
return encoder;
}
を次のように行う必要があります
Springセキュリティのデフォルトインフラストラクチャの多くを使用するには、パスワードに追加する 'username'を取得するために' SaltSource'が必要です。次に、 'MessageDigestPasswordEncoded'のカスタム拡張がパスワードの前にsaltを付加する必要があります(デフォルトではあなたのスキームの代わりに' password {salt} 'を実行します)。 –
私はハッキーな方法で、したがって、username + passwordはPasswordとしてmd5エンコーダに渡されます。大文字/小文字の問題がいくつかありましたが、SQLはこれを解決しました。 –