Probabilmente dovrete personalizzare il vostro AuthenticationProvider
in quanto è qui che il la password viene effettivamente confrontata con i dati dell'utente e si dispone di tutte le informazioni necessarie a disposizione.
Nel metodo authenticate
, è necessario caricare prima i dati utente. Quindi controlla la password fornita dall'utente sia con uno BCryptPasswordEncoder
sia con quello precedente. Se nessuno dei due restituisce una corrispondenza, lanciare un numero BadCredentialsException
.
Se l'utente si autentica correttamente (molto importante :-)) e la password è in formato legacy (il codificatore legacy corrisponde), chiameresti un altro codice per aggiornare i dati dell'account dell'utente e sostituisci l'hash precedente con un bcrypt uno. È inoltre possibile utilizzare BCryptPasswordEncoder
per creare nuovi hash.
Se si desidera, è possibile rilevare in anticipo se l'hash memorizzato era già crittografato prima di effettuare i confronti. Le stringhe di Bcrypt hanno un formato abbastanza distinto.
Si noti inoltre che per rendere più difficile l'individuazione di nomi di account validi, è necessario provare a far sì che il metodo si comporti allo stesso modo sia quando esiste un nome utente fornito che quando non lo fa (in termini di tempo necessario). Quindi chiama gli encoder anche quando non hai dati utente per il nome utente fornito.
fonte
2012-12-07 23:00:44
Questo non risponde affatto alla domanda. Si sta chiedendo come eseguire la migrazione di un'app esistente utilizzando un formato hash precedente a uno utilizzando bcrypt. –