• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Pruebas Online
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

658
Vistas
Spring Boot OAuth2 Cierre de sesión único (Cerrar sesión)

Estoy considerando usar OAuth2 para mi aplicación. La arquitectura que estoy tratando de implementar es la siguiente:

  • Tendré mi propio (y solo este) servidor de autorización
  • Algunas aplicaciones de recursos que validan el acceso a sus recursos mediante el servidor de autorización
  • Algunas aplicaciones cliente (web, móvil) que redirigirán al usuario al servidor de autorización para la autenticación y, en caso de éxito, consumirán las API en las aplicaciones de recursos.

Hasta ahora he logrado implementar esta interacción entre 3 aplicaciones básicas (1 servidor de autenticación, 1 servidor de recursos y 1 cliente). Lo que no funciona es la funcionalidad de cierre de sesión. He leído sobre el "problema notoriamente complicado" que Dave Syer describe en su tutorial, pero en este caso realmente necesito que el usuario vuelva a iniciar sesión después de cerrar la sesión. Intenté otorgar unos segundos al token de acceso y al token de actualización, pero en lugar de que se me pida que inicie sesión nuevamente cuando llegue el vencimiento, recibo un NPE en la aplicación del cliente. También probé las soluciones propuestas en esta publicación para eliminar el token de la tienda de tokens, pero no funciona. Para mí, el cierre de sesión único es el comportamiento deseable para esta implementación. ¿Cómo puedo lograr esto usando Spring Boot Oauth2. Si no es posible por alguna razón, ¿qué alternativas podría usar para implementar una seguridad centralizada usando Spring Boot?

Gracias por adelantado.

almost 3 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Después de muchas pruebas, me di cuenta de que esto se puede resolver simplemente con una redirección al AuthServer y haciendo el cierre de sesión mediante programación de esta manera:

  • En la aplicación cliente (WebSecurityConfigurerAdapter):

     @Override protected void configure(HttpSecurity http) throws Exception { http .logout() .logoutSuccessUrl("http://your-auth-server/exit"); }
  • En el servidor de autorización:

     @Controller public class LogoutController { @RequestMapping("/exit") public void exit(HttpServletRequest request, HttpServletResponse response) { // token can be revoked here if needed new SecurityContextLogoutHandler().logout(request, null, null); try { //sending back to client app response.sendRedirect(request.getHeader("referer")); } catch (IOException e) { e.printStackTrace(); } } }

He publicado una aplicación de muestra en github con un ejemplo completo de esta implementación.

almost 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda