Estoy buscando a Kong para reemplazar mi puerta de enlace API NodeJS manual actual. Actualmente tengo un servicio de usuario que maneja la autenticación (escrito en Django) al proporcionar un JWT al iniciar sesión, que luego el cliente pasa a través de un encabezado. Mi puerta de enlace API actual luego intercepta cualquier llamada, realiza una llamada de validación al servicio de usuario y reemplaza el encabezado JWT con X-User-Id y X-User-Email .
Por lo que sé, Kong puede hacer más o menos lo mismo. Estoy tratando de averiguar el flujo de cómo debería funcionar esto en un mundo perfecto . Todavía tengo la oportunidad de reemplazar gran parte de la infraestructura, por lo que reescribir algunos servicios no está completamente descartado.
Entonces, en mi opinión, lo que sucedería es lo siguiente:
X-Consumer-* , ¿es correcto?Corríjame si mi forma de pensar es incorrecta o si hay una mejor manera de lograrlo. Soy bastante nuevo en todo el asunto de los microservicios.
Estoy trabajando en una configuración similar y estos son mis hallazgos/conclusiones en este momento:
El registro de usuario tiene que ser de la manera que usted describe.
Al iniciar sesión, creo que hay dos formas posibles de resolver esto:
En el escenario 1, deberá obtener la clave jwt y el secreto de kong y generar un token jwt y usar este token para realizar solicitudes a sus servicios kong.
El escenario 2 es prácticamente idéntico al escenario 1, excepto que no tiene que hacer ninguna solicitud a kong para generar un token jwt.
Puede agregar parámetros de carga útil adicionales al token jwt, pero estos no se transmiten a sus servicios ascendentes. Sin embargo, parece que este complemento resuelve este problema (aún no lo he probado):
https://github.com/wshirey/kong-plugin-jwt-claims-headers
Kong pasa el custom_id y el nombre de usuario del consumidor de jwt al servicio de upstream previa autorización, así:
x-consumer-custom-id: [245] x-consumer-username: ['my-test-user'] x-consumer-id: ['1e9e25dd-396f-4195-94fc-f2a8bd8447a2']También pasa todo el encabezado de autorización.
Configuré Kong usando el complemento openId para administrar el proceso de autenticación. El principal problema que encontré es que la versión actualizada del complemento solo está disponible en Kong Enterprise. Curiosamente, este complemento usa bibliotecas comunitarias, de Lua resty, por lo que puede implementar el mismo flujo de OpenID utilizando bibliotecas de código abierto.
Escribí un artículo sobre cómo funciona este flujo aquí
Además, si necesita un ejemplo práctico, consulte este repositorio .
Puede desarrollar y usar un complemento personalizado de kong que intercepte llamadas a su servicio de autenticación.
https://konghq.com/blog/custom-authentication-and-authorization-framework-with-kong/