2012-07-03 22 views
16

Estoy tratando de realizar un inicio de sesión automático cuando el usuario hace clic en un enlace en su correo electrónico con Spring Security.Spring Security - Inicio de sesión programático sin contraseña

he visto un montón de ejemplos para realizar un inicio de sesión programática como la siguiente:

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); 
.... 

El problema que veo es que no tengo la contraseña original así que no puedo crear un UsernamePasswordAuthenticationToken. ¿Alguna otra forma de iniciar sesión con el usuario si no tengo la contraseña de texto sin formato (tengo la que está codificada)?

Gracias de antemano.

+0

¿Puedes mostrar la configuración de tu frijol? ('http' namespace y' AuthenticationManager' y 'AuthenticationProviders' especialmente.) – Xaerxess

+0

Me acaban de responder a continuación. De todos modos, gracias. –

Respuesta

30

Tenga cuidado de saber lo que está haciendo en términos de permitir el inicio de sesión desde un enlace dentro de un correo electrónico. SMTP no es un protocolo seguro, por lo que suele ser malo depender de que alguien tenga un correo electrónico como forma de autenticación.

No necesita utilizar AuthenticationManager si ya sabe que está autenticado. En su lugar sólo se puede establecer la autenticación directamente como se muestra a continuación:

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

Si quieres un ejemplo completo, puede hacer referencia a la SignupController en la aplicación secure mail que fue la base para comenzar a usar Spring Security 3.1 (InfoQ video of presentation).

+0

Awesome answer. Muchas gracias. No sabía que era arriesgado hacer esto, pero analizaré cuál es el mejor enfoque en mi caso :). –

+0

¿Qué sugieres para implementar la autenticación sin contraseñas en primavera, entonces? O bien, ¿la autenticación sin contraseñas no es posible en Spring? – Utku

+1

Por cierto, si la autenticación por un enlace enviado por correo electrónico no es segura, casi ningún sitio web es seguro, ya que casi todos los sitios web están utilizando el correo electrónico para restablecer los enlaces de contraseña. ¿Me estoy perdiendo de algo? – Utku

Cuestiones relacionadas