amazon-web-services - apis aws
Al retorno 401 de un autorizador personalizado de puerta de enlace de API le falta el encabezado ''Control de acceso: permitir origen'' (4)
Debido a que me tomó un tiempo encontrar la manera de ponerlo todo junto en Cloud Formation, aquí hay un fragmento que muestra cómo configurarlo.
...
MyApi:
Type: "AWS::ApiGateway::MyApi"
Properties:
Description: My API
Name: "my-api"
MyApiAuthorizer:
Type: "AWS::ApiGateway::Authorizer"
Properties:
Name: "my-api-authorizer"
IdentitySource: "method.request.header.Authorization"
ProviderARNs:
- !GetAtt MyUserPool.Arn
RestApiId: !Ref MyAApi
Type: COGNITO_USER_POOLS
MyApiGatewayResponse:
Type: "AWS::ApiGateway::GatewayResponse"
Properties:
ResponseParameters:
"gatewayresponse.header.Access-Control-Allow-Origin": "''*''"
"gatewayresponse.header.Access-Control-Allow-Headers": "''*''"
ResponseType: UNAUTHORIZED
RestApiId: !Ref MyApi
StatusCode: "401"
Para evitar que los usuarios que no han iniciado sesión llamen a mi función lambda a través de AWS API Gateway, estoy usando la solución lambda Custom Authorizer.
Si la solicitud es autorizada (200) y recibo una respuesta del lambda llamado todo funciona bien y obtengo el encabezado Access-Control-Allow-Origin
.
Pero si la solicitud no está autorizada, obtengo un 401 que no tiene encabezado Access-Control-Allow-Origin
, por lo tanto, no puedo leer el estado 401 de la respuesta y redirigir al usuario a la página de inicio de sesión.
Creo que esto se debe a que el mecanismo de Autorización personalizada no sabe que la solicitud necesita usar CORS. ¿Alguien sabe que este es realmente el problema? ¿Conoces alguna posible solución?
La forma más fácil de resolver esto para todos los errores 4XX (incluidos los errores 401) es ir a "Respuestas de puerta de enlace" y luego seleccionar "Valor predeterminado 4XX" y luego agregar el encabezado "Control de acceso-Permitir-Origen" con el valor ''* ''.
Ver captura de pantalla:
Me complace anunciar la nueva función de Respuestas de puerta de enlace que le permite personalizar las respuestas de error para las solicitudes que no llaman a su integración. Esto le permite asegurarse de que los encabezados CORS estén incluidos, incluso en solicitudes de autenticación fallidas.
Lea más en nuestra documentation , que incluye un ejemplo de CORS.
Sí, este es un error conocido con autorizaciones personalizadas API Gateway. Gracias por traer esto a nuestra atención. El equipo actualizará esta publicación cuando hayamos implementado una solución. Disculpas por los inconvenientes.