
Tengo dos servidores en dos ubicaciones detrás de una interfaz de Nginx. El backend A implementa la autenticación con OAuth. El backend B no lo hace.
Creo que una forma sencilla de agregar autenticación para la ubicación B sería enviar cada solicitud al backend A primero. El flujo que tengo en mente:
request for /b/kitten.png --> [ nginx ]
[ nginx ] --> request for /index.html --> [backend A]
if A responds 200:
[ nginx ] --> request for /kitten.png --> [backend B]
otherwise return what A returned (redirect to OAuth)
¿Es esto posible en Nginx? Si no, ¿tal vez en OpenResty/HAProxy/Traefik?
Respuesta1
No es una respuesta completa, pero es demasiado larga para comentar:
La configuración que usted describe es, en concepto, similar a una estrategia bastante común:
- descargar la autenticación a un sistema
- use su proxy inverso para hacer cumplir que solo los clientes autenticados puedan acceder a sus otras aplicaciones/backends (inspeccionando la solicitud)
- los clientes no autenticados son rechazados por el proxy inverso (y/o idealmente redirigidos a una página de inicio de sesión del proveedor de autenticación, que una vez autenticados exitosamente redirige a la aplicación)
- a los clientes autenticados se les concede acceso.
Esto requiere un método para validar el encabezado/cookie/token de sesión que el cliente envía en el proxy inverso. La ventaja es, por supuesto, que las aplicaciones expuestas por el proxy inverso no tienen que proporcionar sus propios métodos de inicio de sesión/autenticación.
Para nginx, un poco de código lua parece ser una forma común de crear dicho método.
Por ejemplo el access_by_lua
El método se usa comúnmente para realizar dicha integración con nginx y keycloak como proveedor de autenticación. Vea los ejemplos:aquíyaquí