Permita el modo invitado (sin autorización) en el Autorizador personalizado en AWS.
Estoy tratando de encontrar una forma de permitir el modo de invitado en un autorizador personalizado en AWS.
Básicamente, lo que quiero lograr es el siguiente escenario:
* si no hay encabezado Authorization
en la solicitud, se activa la función lambda que responde con algunos datos
* si hay un encabezado Authorization
, entonces mi autorizador personalizado debe verificar el token JWT y permitir o denegar el acceso. Luego, si custom-authorizer
devuelve Permitir
, se activa la función lambda.
Veo que puedo lograr uno u otro, es decir, puedo abrir el punto final (eliminar completamente el autorizador
), lo que funciona bien, o puedo colocar el autorizador
, que también funciona bien.
Todavía no veo una forma de omitir el autorizador personalizado
cuando no hay encabezado Authorization
.
Ejemplo de configuración en serverless:
funciones:
hola:
controlador: handler.hello
eventos:
- http:
ruta: /hello
método: obtener
privado: verdadero
autorizador:
fuenteDeIdentidad: method.request.header.Authorization # ¿Puede ser opcional?
nombre: custom-authorizer
autorizador-personalizado:
controlador: autorizador.handler
Por mis pruebas, puedo confirmar que una vez que hay autorización
y no hay encabezado Authorization
en la solicitud, mi autorizador personalizado
no se activa en absoluto y la API Gateway responde de inmediato con un 401 no autorizado
.
Tenga en cuenta que en mi modo de invitado, no quiero recibir una respuesta personalizada de API Gateway (esto es posible y funciona). Quiero activar la función lambda como si no hubiera autorización en absoluto.
Estoy llegando a la conclusión de que esto es imposible y la única solución es eliminar la autorización
y luego hacer algún código personalizado en la función lambda.
¿Alguna sugerencia?
davy.ai
Parece que intentas lograr un escenario en el cual se utiliza un autorizador personalizado para comprobar un token JWT en la cabecera de
Authorization
, pero si la cabecera no está presente, se activa una función lambda en su lugar.A partir de tus pruebas, parece que esto no es posible con la configuración actual. Como solución alternativa, podrías eliminar el
autorizador
completamente y luego hacer algo de código personalizado en la función lambda para manejar el escenario donde la cabecera deAuthorization
no está presente.