59 votes

L'en-tête 'Access-Control-Allow-Allow-Origin' manquant dans l'en-tête 401 retour d'un API Gateway

Pour empêcher les utilisateurs qui ne sont pas identifiés à l'appel de ma fonction lambda par le biais de l'API AWS Passerelle, je suis en utilisant la Coutume de l'Autorisateur lambda solution.

Si la demande est autorisée (200) et je reçois une réponse de l'appelé lambda tout fonctionne bien et j'ai l' Access-Control-Allow-Origin - tête.

Mais si la demande n'est pas autorisée, je reçois un 401 qui n'a pas d' Access-Control-Allow-Origin - tête, par conséquent, la prévention de moi à la lecture de la 401 état de la réponse et de rediriger l'utilisateur vers la page de connexion.

Je crois que c'est parce que la Coutume de l'Autorisation mécanisme n'est pas au courant que la demande doit utiliser la SCRO. Personne ne sait que c'est réellement le problème? Êtes-vous au courant de toute solution possible?

30voto

Bob Kinney Points 7140

Je suis heureux d'annoncer la nouvelle fonctionnalité Gateway Responses, qui vous permet de personnaliser les réponses d'erreur pour les demandes qui n'appellent pas votre intégration. Cela vous permet de vous assurer que les en-têtes CORS sont inclus, même en cas d'échec des demandes d'authentification.

Lisez-en plus dans notre documentation , qui inclut un exemple CORS.

21voto

Lorenzo de Lara Points 1140

Oui, il s'agit d'un bogue connu avec les autoriseurs personnalisés API Gateway. Merci d'avoir porté cela à notre attention. L'équipe mettra à jour ce post lorsque nous aurons déployé un correctif. Mes excuses pour le derangement.

10voto

Alex Robinson Points 11

Le moyen le plus simple de résoudre ce problème pour toutes les erreurs 4XX (y compris les erreurs 401) consiste à accéder à "Réponses de la passerelle", puis à sélectionner "4XX par défaut", puis à ajouter l'en-tête "Accès-Contrôle-Autoriser-Origine" avec la valeur '* '.

Voir la capture d'écran:

5voto

pisomojado Points 698

Comme il m'a fallu un certain temps pour comprendre comment assembler tout cela dans Cloud Formation, voici un extrait montrant comment le configurer.

 ...
    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"
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X