1

Im Bau einer Backend serverless die folgenden AWS-Technologien:AWS Lambda, API-Gateway & Cognito: Wie bekomme ich das Identitätsobjekt in der Lambda-Funktion?

  • AWS api_gateway
  • AWS cognito
  • AWS Lambda

In api_gateway ich mit einem Cognito User-Pool authorizer und Im erstellt haben Diese Berechtigung für alle Anfragen an das Backend.

Alles funktioniert: Wenn ein Benutzer eine Anfrage mit einem ungültigen JWT-Token stellt, antwortet der Server entsprechend. Ein gültiges JWT-Token führt die angeforderte Lambda-Funktion aus.

Problem: Ich bin nicht in der Lage identity Informationen abzurufen, wie accessKey, accountId, cognitoIdentityId und so weiter. Alle diese Variablen sind null, wenn ich Zugriff auf diese über das context Objekt in der Lambda-Funktion

Frage: Was muss ich tun, um die identity Variablen zu bekommen?

+0

http://stackoverflow.com/questions/29928401/how-to-get-the-cognito-identity-id-in-aws-lambda hilft Ihnen das? – JamesKn

+0

Ich habe mir die Frage und die Antworten angeschaut, aber nichts scheint für mich zu funktionieren. – Vingtoft

+0

Ich wundere mich, wenn Sie die Body-Mapping wie hier beschrieben fehlt. https://aws.amazon.com/blogs/mobile/integrating-amazon-cognito-user-pools-with-api-gateway/ – JamesKn

Antwort

5

Das Kontextobjekt in der Lambda-Funktion enthält den Kontext aus Lambdas Perspektive. Die Lambda-Funktion wird mit der Identität ihrer Ausführungsrolle ausgeführt, daher enthält ihr Kontext nicht die Identitätsattribute aus dem Cognito-Benutzerpool.

Das API-Gateway macht die Cognito-Benutzerpoolidentitätsinformationen über die Variable $ context.authorizer.claims im API-Gateway verfügbar. Um auf diese Informationen innerhalb Ihrer Lambda-Funktion zuzugreifen, müssen Sie Ihre Körperzuordnungsvorlage in API Gateway ändern, um die gewünschten Daten von $ context.authorizer.claims über den Anfragetext an Ihre Lambda-Funktion zu übergeben. Ihre Lambda-Funktion liest diese Informationen aus dem Anfragetext wie jedes andere Feld.

Dokumentation hierzu finden Sie here. Scrollen Sie zum Abschnitt "So aktivieren Sie einen Benutzerpool-Autor für Methoden" und sehen Sie Schritt 7: "Wählen Sie bei Bedarf Integrationsanforderung zum Hinzufügen von $ context.authorizer.claims ..."

+0

Ist es immer noch richtige Antwort? Weil es für mich nicht funktioniert. Ich bekomme leere Werte für jeden Anspruch. Und in den letzten Tagen habe ich mehr Kommentare gefunden, wie ich. – nicq

0

Wenn Sie den Cognito erstellt Benutzerpool Sie hätten zwei IAM-Rollen erstellt. Sie können nun Setup-API-Gateway die Identitätsinformation von

  1. Ermächtigung zum AWS_IAM
  2. Schalten gesetzt weitergeben Invoke with caller credential

In Lambda sollten Sie in der Lage sein, die Informationen in Zusammenhang zu erhalten.

Hinweis: In den Cognito-IAM-Rollen benötigen Sie die Berechtigung zum Aufrufen von API-Gateway.

Verwandte Themen