Spring Security: le mot de passe codé ne ressemble pas à BCrypt
Dans Spring Security, authentification de la base de données avec hachage du mot de passebcrypt.
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));
Passez en revue la sortie de débogage, il est toujours dit «Encoded password does not look like BCrypt», même le mot de passe correct est fourni.
//... 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
Solution
Dans l'algorithme de hachagebcrypt, à chaque fois, une valeur de hachage différente de longueur 60 est générée, par exemple
$2a$10$LOqePml/koRGsk2YAIOFI.1YNKZg7EsQ5BAIuYP1nWOyYRl21dlne
Une erreur courante, la longueur de la colonne «mot de passe» (table des utilisateurs) est inférieure à 60, par exemple,password VARCHAR(45)
, et certaines bases de données tronqueront automatiquement les données. Ainsi, vous obtenez toujours l'avertissement «Le mot de passe codé ne ressemble pas à BCrypt».
To solve it, assurez-vous que la longueur de la colonne «mot de passe» est d'au moins 60.