2016-04-28 7 views
28

Um fehlende Benutzer zu verhindern, die nicht angemeldet haben meine Lambda-Funktion über die AWS-API-Gateway zu nennen, ich bin die Gewohnheit mit Autorisierungs-Lambda-Lösung.401 Rückkehr von einer API-Gateway Benutzerdefinierte Authorizer wird "Access-Control-Allow-Origin-Header

Wird der Antrag berechtigt ist (200) und ich bekomme eine Antwort von dem gerufenen Lambda alles funktioniert und ich die "Access-Control-Allow-Origin-Header.

Aber wenn die Anfrage nicht autorisiert ist, bekomme ich eine 401, die keinen 'Access-Control-Allow-Origin'-Header hat, weshalb ich den Status 401 der Antwort nicht lesen und den Benutzer zur Anmeldung umleiten kann Seite.

Ich glaube, das liegt daran, dass der benutzerdefinierte Autorisierungsmechanismus nicht weiß, dass die Anfrage CORS verwenden muss. Weiß jemand, dass dies tatsächlich das Problem ist? Kennen Sie eine mögliche Lösung?

Antwort

9

Ja, dies ist ein bekannter Fehler bei benutzerdefinierten API-Gateway-Autorisierungen. Danke, dass Sie uns darauf aufmerksam gemacht haben. Das Team wird diesen Beitrag aktualisieren, wenn wir einen Fix bereitgestellt haben. Entschuldigung für die Unannehmlichkeiten.

+5

Alle Updates? Es scheint, dass der Header immer noch nicht gesendet wird. – zanona

+2

Das gleiche Problem hier zu treffen. Ein Update wäre großartig –

+3

Ja, das ist immer noch ein Problem, das ist ziemlich lächerlich, wenn man bedenkt, wie lange es schon war. Solche Dinge machen API Gateway nicht produktionsbereit, und das Schlimmste ist, dass Sie erst herausfinden, wenn Sie stark in den Service investiert haben. – paulwithap

5

Ich bin glücklich, die neuen Gateway-Antworten bieten zu verkünden, mit dem Sie die Fehlerantworten auf Anfragen anpassen können, die Ihre Integration nicht nennen. Auf diese Weise können Sie sicherstellen, dass CORS-Header auch bei fehlgeschlagenen Authentifizierungsanforderungen enthalten sind.

Lesen Sie mehr in unserem documentation, die ein CORS Beispiel enthält.

+0

, was Sie brauchen: http://docs.aws.amazon.com/apigateway/latest/developerguide/set-up-gateway-responses-in-swagger.html?shortFooter=true – Sergei

+0

Wo dass json snipped Notwendigkeit zu gehen ? –

+0

Wenn Sie mit serverless.yaml arbeiten, müssen Sie https://github.com/serverless/examples/blob/master/aws-node-auth0-custom-authorizers-api/serverless.yml wissen # L33 –

0

Weil es mir dauerte eine Weile, um herauszufinden, wie sie alle zusammen in Wolkenbildung zu setzen, hier ist ein Ausschnitt zeigt, wie es einzurichten.

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

Der einfachste Weg, dies für alle 4XX- Fehler zu beheben (einschließlich 401-Fehler) ist auf „Gateway-Antworten“ zu gehen, und wählen Sie dann „4XX- Standard“ und dann die der Header „Access-Control-Allow- hinzufügen Ursprung "mit dem Wert '*'.

Siehe Screenshot:

Verwandte Themen