2012-07-03 1 views
16

Sto tentando di eseguire un accesso automatico quando l'utente fa clic su un collegamento nella sua e-mail con Spring Security.Spring Security - Accesso programmatico senza password

ho visto un sacco di esempi per eseguire un accesso programmatico come la seguente:

UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password); 
try { 
    Authentication auth = authenticationManager.authenticate(token); 
    SecurityContextHolder.getContext().setAuthentication(auth); 
    repository.saveContext(SecurityContextHolder.getContext(), request, response); 
    rememberMeServices.loginSuccess(request, response, auth); 
.... 

Il problema che vedo è che non ho la password originale, quindi non posso creare un UsernamePasswordAuthenticationToken. Qualsiasi altro modo per accedere all'utente se non ho la password in testo semplice (ho quella che è codificata)?

Grazie in anticipo.

+0

Puoi mostrare la configurazione dei tuoi fagioli? ('Namespace' http' e 'AuthenticationManager' e' AuthenticationProviders' in particolare.) – Xaerxess

+0

Mi hanno appena risposto di seguito. Comunque, grazie. –

risposta

30

Fare attenzione che si sappia cosa si sta facendo in termini di consentire l'accesso da un collegamento all'interno di una e-mail. SMTP non è un protocollo sicuro e quindi è in genere male affidarsi a qualcuno che ha un indirizzo email come forma di autenticazione.

Non è necessario utilizzare AuthenticationManager se si sa già che sono autenticati. Invece si può semplicemente impostare l'autenticazione direttamente come illustrato di seguito:

Authentication authentication = new UsernamePasswordAuthenticationToken(user, null, 
    AuthorityUtils.createAuthorityList("ROLE_USER")); 
SecurityContextHolder.getContext().setAuthentication(authentication); 

Se volete un esempio completo, è possibile fare riferimento al SignupController nel secure mail applicazione che è stata la base per iniziare a primavera Security 3.1 (InfoQ video of presentation).

+0

Risposta stupenda. Grazie mille. Non sapevo che fosse rischioso farlo, ma analizzerò quale è l'approccio migliore nel mio caso :). –

+0

Che cosa suggeriresti di implementare l'autenticazione senza password in primavera, allora? Oppure, l'autenticazione senza password non è possibile in primavera? – Utku

+1

A proposito, se l'autenticazione tramite un collegamento inviato via e-mail non è sicura, quasi nessun sito Web è sicuro, dal momento che quasi tutti i siti Web utilizzano l'e-mail per i link di reimpostazione della password. Mi sto perdendo qualcosa qui? – Utku