Spring Security:エンコードされたパスワードはBCryptのように見えません
Spring Securityで、bcryptパスワードハッシュを使用したデータベース認証。
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; //... String password = "123456"; PasswordEncoder passwordEncoder = new BCryptPasswordEncoder(); String hashedPassword = passwordEncoder.encode(password);
spring-security.xml
//...
CREATE TABLE users ( username VARCHAR(45) NOT NULL , password VARCHAR(45) NOT NULL , enabled TINYINT NOT NULL DEFAULT 1 , PRIMARY KEY (username));
デバッグ出力を確認します。正しいパスワードが指定されていても、常に「Encoded password does not look like BCrypt」と表示されます。
//... 12:56:31.868 DEBUG o.s.jdbc.datasource.DataSourceUtils - Returning JDBC Connection to DataSource 12:56:31.868 WARN o.s.s.c.bcrypt.BCryptPasswordEncoder - Encoded password does not look like BCrypt 12:56:31.868 DEBUG o.s.s.a.d.DaoAuthenticationProvider - Authentication failed: password does not match stored value
溶液
bcryptハッシュアルゴリズムでは、毎回、長さ60の異なるハッシュ値が生成されます。
$2a$10$LOqePml/koRGsk2YAIOFI.1YNKZg7EsQ5BAIuYP1nWOyYRl21dlne
よくある間違いですが、「password」列(usersテーブル)の長さが60未満(たとえば、password VARCHAR(45)
)であり、一部のデータベースはデータを自動的に切り捨てます。 そのため、「エンコードされたパスワードはBCryptのように見えません」という警告が常に表示されます。
To solve it、「パスワード」列の長さが60以上であることを確認してください。