¿Es la autenticación + autorización una buena idea a nivel de puerta de enlace cuando se utilizan microservicios?

3

Tengo este diseño simple:

                   ---------               -------------
----> Queries ----> Gateway ---- RPC ----> Microservices
                   ---------               -------------

Estoy pensando en que el gateway maneje la autenticación y la autorización dejando que mis microservicios confíen completamente en el gateway (también conocido como si el gateway dice que el usuario x debería eliminarse, no vuelva a verificar el token de autenticación, solo hágalo). Los microservicios no estarán expuestos al mundo y establecerán una conexión segura (VPN tal vez) a la Puerta de enlace.

¿Es esta una buena idea? ¿O debería tomar la solución más racional y verificar el token de autenticación con cada solicitud tanto en la puerta de enlace Y en el microservicio? ¿Qué puede salir mal?

    
pregunta Valentin Radu 18.01.2018 - 20:29
fuente

2 respuestas

4

¿Cómo se bloquean tus microservicios?

Si un atacante es interno o encuentra una debilidad en otro lugar dentro de su organización y ataca sus microservicios, ¿están completamente segregados de modo que solo las solicitudes llegan a través de la puerta de enlace?

¿Alguno de sus microservicios realiza alguna acción que se considere más privilegiada que el resto? ¿Ejemplo varios servicios generan contenido de página mientras que otros pagos procesados?

Mi opinión es que debería pasar un token de autenticación a todos sus servicios después de la autenticación en su puerta de enlace, pero esto dependerá de su modelo de amenaza del sistema.

    
respondido por el McMatty 18.01.2018 - 20:48
fuente
2

No es necesariamente una mala idea, pero creo que es un poco más complicado. Por la información que nos ha proporcionado, no entiendo en absoluto la necesidad de la puerta de enlace.

En primer lugar, asumiré que tiene un servicio / servidor independiente que actúa como servidor de autenticación, que consume las credenciales de los usuarios y escupe (digamos) tokens JWT firmados que confirman el rol y la autenticidad de cada usuario. Luego, cuando el cliente desea acceder a ejecutar una consulta en uno de los microservicios, puede obtener un token JWT del servidor de autenticación si aún no tiene uno, luego pasar este token JWT en el encabezado de autenticación en una solicitud directamente a El microservicio.

El microservicio puede verificar la firma en el token JWT con el mismo algoritmo utilizado para firmarlo (por ejemplo, el algoritmo HMAC-SHA256). Si la firma es válida, el microservicio verifica la función suministrada en el token de JWT y cumple con la solicitud o la rechaza.

El problema con su método es la posibilidad de eludir la puerta de enlace y hacer solicitudes directamente al microservicio. Por ejemplo:

                   ---------               -------------
----> Queries ----> Gateway ---- RPC ----> Microservices
                   ---------               -------------
                                              ^
                                              |
----> Attacker Query -------------------------

Cuando el atacante no pasa un token JWT y el microservicio seguirá cumpliendo con la solicitud.

La única buena razón para usar una puerta de enlace como usted explicó es si no hay forma de que la persona que forme la consulta sepa dónde reside este microservicio y debe usar la puerta de enlace para dirigir su consulta a la microempresa. Servicio. En cuyo caso, a menos que pueda garantizar absolutamente que ninguna solicitud, excepto las de la puerta de enlace, pueda llegar a los microservicios, deberá verificar los tokens tanto en los microservicios como en la puerta de enlace.

Espero que ayude!

    
respondido por el dFrancisco 18.01.2018 - 22:01
fuente

Lea otras preguntas en las etiquetas