Frühlingssicherheit: Das verschlüsselte Passwort sieht nicht wie BCrypt aus
In Spring Security wird die Datenbankauthentifizierung mit dem Kennwort-Hashing vonbcryptdurchgeführt.
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));
Überprüfen Sie die Debug-Ausgabe. Es wird immer "Encoded password does not look like BCrypt" angezeigt, auch wenn das richtige Kennwort angegeben ist.
//... 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
Lösung
Inbcrypt Hashing-Algorithmus wird beispielsweise jedes Mal ein anderer Hash-Wert der Länge 60 erzeugt
$2a$10$LOqePml/koRGsk2YAIOFI.1YNKZg7EsQ5BAIuYP1nWOyYRl21dlne
Ein häufiger Fehler: Die Länge der Spalte "Kennwort" (Benutzertabelle) beträgt weniger als 60, z. B.password VARCHAR(45)
, und einige Datenbanken schneiden die Daten automatisch ab. So erhalten Sie immer die Warnung „Das verschlüsselte Passwort sieht nicht wie BCrypt aus“.
To solve it, stellen Sie sicher, dass die Länge der Spalte "Passwort" mindestens 60 beträgt.