Autorización de usuario con microservicios

12

¿Deberían los microservicios ser responsables de manejar su propia autorización o cree que es mejor tener un servicio de autorización separado que se comparta entre todos o un subconjunto (dentro del mismo dominio comercial) de microservicios?

Para mí, esto último tiene más sentido, ya que facilita la aplicación de cambios, la aplicación de políticas; es SECO, etc. Sin embargo, puede fácilmente salirse de control con todo tipo de servicios que descargan sus reglas en un solo lugar y también se preocupan por la sobrecarga de la red.

¿Alguna idea?

morcmarc
fuente

Respuestas:

7

Usaría un sistema de autenticación centralizado y unificado y tendría permisos / estadísticas separadas para cada microservicio (algo así como cómo aún no puedo votar en este sitio de intercambio de pila, pero puedo en el desbordamiento de pila mientras uso el sistema de autenticación de intercambio de pila central). Uno de mis proyectos actuales involucrará este enfoque en el futuro cercano, lo cual será bueno; El trabajo de desarrollo anterior implicó la creación de un sistema compatible con HIPPA, que requiere un segundo nivel de autorización / autenticación, y es una molestia que consume mucho tiempo para las autorizaciones en cadena de componentes del sistema legalmente separados pero funcionalmente inseparables. El proceso de depuración implica mucho menos alegría que un simple inicio de sesión oauth o una api con encabezados appid y x-auth.

Cuál usar depende de los requisitos específicos de una hoja de ruta de desarrollo, pero elegiría el enfoque más simple siempre que sea posible para evitar gastos excesivos y tiempo / esfuerzo de desarrollo.

Jonathan Voss
fuente
Utilizamos OAuth2 para la autenticación, y me gustaría seguir el mismo principio, es decir, tener un servicio central con una responsabilidad única y bien definida, para la autorización, en lugar de duplicar la funcionalidad y la lógica de dispersión entre los servicios. Para mí es una violación del límite del dominio. Sin embargo, estoy de acuerdo en que significa que tendremos que resolver el aislamiento de las reglas de servicio (ala stackoverflow, programadores, etc.).
morcmarc
2
Potencialmente, podría tener permisos globales que son anulados por permisos específicos del servicio, útiles si un puñado de microservicios centrales usan los mismos permisos. Los permisos específicos del microservicio probablemente deberían almacenarse en la infraestructura de la aplicación para ese microservicio para evitar posibles problemas de rendimiento para el servicio de autenticación central.
Jonathan Voss
4

Cada microservicio no debería tener que hacer su propia autenticación, pero sí debe hacer su propia autorización.

Fuente

Y esto tiene mucho sentido. Supongo que no hay dudas sobre la autenticación central. Pero la autorización es bastante confusa.

Teniendo en cuenta que el número de microservicios puede crecer hasta cientos, miles, un servicio de autorización central debe ser responsable de enumerar solo los permisos, pero no validar esos permisos. El microservicio individual puede tener que enfocarse de manera diferente para validar el permiso.

Es posible que este servicio de autorización central necesite obtener modelos de diferentes servicios y un enfoque diferente para tomar una decisión, puede parecer fácil y bonito al principio. Pero podría ser un caos más adelante.

Ashwani Agarwal
fuente