Estrategia de autenticación de microservicios


Estoy teniendo dificultades para elegir una estrategia de autenticación decente/segura para una arquitectura de microservicios. El único post que encontré sobre el tema es este: Inicio de sesión único en la Arquitectura de Microservicios

Mi idea aquí es tener en cada servicio (por ejemplo. autenticación, mensajería, notificación, perfil, etc.) una referencia única a cada usuario (lógicamente su user_id) y la posibilidad de obtener el id del usuario actual si está conectado.

De mis investigaciones, veo hay dos estrategias posibles:

1. Arquitectura compartida

Arquitectura compartida

En esta estrategia, la aplicación de autenticación es un servicio entre otros. Pero cada servicio debe ser capaz de hacer la conversión session_id => user_id así que debe ser muy simple. Es por eso que pensé en Redis, que almacenaría la clave:valor session_id:user_id.

2. Arquitectura de cortafuegos

Arquitectura de cortafuegos

En esta estrategia, el almacenamiento de sesiones realmente no importa, ya que solo lo maneja el aplicación de autenticación. Entonces el user_id puede ser reenviado a otros servicios. Pensé en Rails + Devise (+Redis o mem-cached, o almacenamiento de cookies, etc. pero hay un montón de posibilidades. Lo único que importa es que Service X nunca necesitará autenticar al usuario.


¿Cómo se comparan esas dos soluciones en términos de:

  • seguridad
  • robustez
  • escalabilidad
  • facilidad de uso

O tal vez usted sugeriría otra solución ¿No lo he mencionado aquí?

Me gusta más la solución #1, pero no he encontrado mucha implementación predeterminada que me asegure en el hecho de que voy en la dirección correcta.

Espero que mi pregunta no se cierre. Realmente no sé dónde más preguntar.

Gracias de antemano

Author: Community, 2015-04-15

4 answers

Basado en lo que entiendo, una buena manera de resolverlo es usando el protocolo OAuth 2 (puedes encontrar un poco más de información al respecto en http://oauth.net/2/)

Cuando su usuario inicie sesión en su aplicación obtendrá un token y con este token podrá enviar a otros servicios para identificarlos en la solicitud.

Modelo OAuth 2

Ejemplo de Microservicio Encadenado Diseño Modelo de Arquitectura

Recursos:

 49
Author: Tiarê Balbi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-09-20 16:11:38

Respuesta corta : Use la autenticación basada en tokens de tipo Oauth2.0, que se puede usar en cualquier tipo de aplicaciones como una aplicación web o una aplicación móvil. La secuencia de pasos involucrados para una aplicación web sería entonces

  1. autenticar contra proveedor de ID
  2. mantenga el token de acceso en cookie
  3. acceder a las páginas en webapp
  4. llame a los servicios

El siguiente diagrama muestra los componentes que se necesitarían. Tal arquitectura que separa la web y los datos las api darán una buena escalabilidad, resiliencia y estabilidad

introduzca la descripción de la imagen aquí

 1
Author: Sandeep Nair,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-07 23:48:00

Puede utilizar idenitty server 4 para fines de autenticación y autorización

Debe usar Arquitectura de firewall por lo tanto, tiene más control sobre seguridad ,robustez, escalabilidad y facilidad de uso

 0
Author: Vijay Parmar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-08-17 08:42:47

El patrón de puerta de enlace de API debe usarse para implementar esto usando OpenID Connect. El usuario será autenticado por IDP y obtendrá el token JWT del servidor de autorización. Ahora el sistema API gateway puede almacenar este token en la base de datos Redis y establecer la cookie en el navegador. API gateway utilizará la cookie para validar la solicitud del usuario y enviará el token a los Microservicios.

API Gateway actúa como un único punto de entrada para todos los tipos de aplicaciones de clientes como la aplicación cliente de java script pública, aplicación web tradicional, aplicación móvil nativa y aplicaciones de clientes de terceros en la arquitectura de microservicios.

Puede encontrar más detalles al respecto en http://proficientblog.com/microservices-security /

 0
Author: ManishSingh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-01-09 20:45:04