Pregunta Al retorno 401 de un autorizador personalizado de puerta de enlace de API le falta el encabezado 'Control de acceso: permitir origen'


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 Access-Control-Allow-Origin encabezamiento.

Pero si la solicitud no está autorizada, obtengo un 401 que no tiene Access-Control-Allow-Origin encabezado, lo que me impide 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?


32
2018-04-28 11:25


origen


Respuestas:


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.


10
2018-04-28 18:00



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 documentación, que incluye un ejemplo de CORS.


9
2018-06-07 04:26



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"

1
2017-09-16 23:28



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:


1
2018-03-04 09:42