Estoy tratando de aprender más sobre la autenticación en microservicios utilizando OAuth2.
He estado leyendo sobre OAuth2, y si bien entiendo lo básico, tengo muchas dificultades para entender cómo funciona todo junto.
Empecemos con un ejemplo:
Tengo un sitio web, que se basa en dos microservicios:
- servicio de autenticación: básicamente un servicio auth2 que utiliza la autenticación de contraseña basada en el propietario del recurso.
- álbum: una vez que un usuario se autentica, puede crear álbumes de fotos y compartirlos con otros usuarios del sitio.
- el sitio web tiene una opción de "recordarme por 30 días" durante el inicio de sesión.
- el usuario debe poder ver desde qué dispositivos y ubicaciones ha iniciado sesión y poder finalizarlos (en caso de inicios de sesión no autorizados). Esto es similar a la funcionalidad que proporcionan FaceBook y DropBox.
Comencemos con la aplicación de autenticación, una respuesta auth2 típica se ve así:
{"refresh_token": "aEMpqJsg6aotX9HaeVnFqqRBaQn7Bo", "access_token": "aSAX21mzmYRnizwhn1ltFZWDsIbif4", "expires_in": 36000, "token_type": "Bearer", "scope": "read write"}
El botón de inicio de sesión de mi sitio web solo solicita un servicio OAuth2 a mi servicio de autenticación y recibe la respuesta anterior. Ahora, ¿qué hago con esta información para usar esto? ¿Acabo de almacenar esta respuesta JSON en una cookie? Necesito algún tipo de persistencia para poder usar este token para solicitudes posteriores.
Siguiente pregunta: ¿Puedo crear un token que caduque en 30 días o se considera una mala práctica? Si es así, ¿cómo puedo mitigar esto sin perder esta funcionalidad?
Ahora a la siguiente parte: el servicio de mi álbum necesita saber quién es el usuario. ¿Supongo que la puerta de enlace de la API tiene la responsabilidad de asegurarse de que el token sea correcto, y también incluir el ID de usuario en la solicitud? ¿Qué pasa si el álbum necesita información adicional sobre el usuario? ¿Debería contactarse con la aplicación de autenticación para esto?
Traté de encontrar las respuestas a estas preguntas por mi cuenta, pero es muy difícil encontrar información realmente buena sobre esto. La mayoría de las cosas que encontré en la red me dieron respuestas vagas, como "leer las especificaciones de oauth2" o "usar JWT". Si bien me doy cuenta de que es necesario un buen entendimiento de oauth2, sería útil para mí si recibiera alguna explicación de alguien que tenga experiencia real en la construcción de algo como esto. (Las recomendaciones de libros también son bienvenidas).