Spring Security: Das verschlüsselte Passwort sieht nicht aus wie BCrypt

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.