5

Ich arbeite an einer AWS API Gateway-Implementierung mit einem Lambda-Backend. Ich benutze die API-Gateway-Integration mit den Cognito-Userpools (ziemlich neu), anstatt einen benutzerdefinierten Authorizer mit Lambda zu erstellen (was der empfohlene Weg war, bevor es integriert wurde).AWS-API-Gateway/Cognito Userpools/Lambda kann keine Anruferanmeldeinformationen übergeben

Ich habe einen Proof of Concept (JavaScript) erstellt, der einen Benutzer mit Cognito authentifiziert und dann mit diesen Anmeldeinformationen einen Aufruf an das API Gateway macht. Der Endaufruf an das API-Gateway erfolgt also grundsätzlich mit dem JWT-Token, das ich von Cognito (result.idToken.jwtToken) im Authorization-Header erhalten habe. Das alles funktioniert und ich kann bestätigen, dass nur mit diesem Token Sie auf die API zugreifen können.

Alles funktioniert gut, aber jetzt möchte ich Zugriff auf die Cognito-Identität in meinem Lambda erhalten; zum Beispiel die Identy ID oder der Name oder die Email. Ich habe gelesen, wie man alle Parameter abbildet, aber ich benutze gerade die Standardmethode "Method Request Passthrough" in der Integrationsanfrage. Ich protokolliere alle Parameter im Lambda und alle 'cognito' Parameter sind leer.

Ich habe viele ähnliche Fragen durchgesehen und alle schlagen vor, das Kontrollkästchen "Mit Anruferanmeldeinformationen aufrufen" in der Integrationsanfrage zu aktivieren. Das macht vollkommen Sinn.

jedoch kann dieses Kontrollkästchen nur dann aktiviert werden, wenn Sie AWS_IAM als Autorisierung verwenden und nicht, wenn Sie Ihre cognito userpool ausgewählt haben. Es ist also einfach nicht möglich, es auszuwählen und ist tatsächlich deaktiviert.

Weiß jemand, was in diesem Fall zu tun ist? Ist dies noch in Arbeit, oder gibt es einen Grund, warum Sie dies nicht aktivieren können und die cognito-Anmeldeinformationen in Ihrem Lambda erhalten?

Vielen Dank.

+0

Können Sie Ihren Anwendungsfall teilen, dass Sie die Anruferanmeldeinformationen von Cognito userpool benötigen, da Sie die wichtigsten Benutzeridentifikation in Ihrer Lambda-Funktion zugreifen können? –

+0

Sicher; Wir müssen einige Informationen darüber protokollieren/speichern, welcher Benutzer auf welche Daten (plus einige weitere Informationen) für die Berichterstattung zugegriffen hat. Dazu benötigen wir noch mehr Benutzerinformationen. Ich würde erwarten, dass dies gesendet wird, da in der Vorlage 'Method Request Passthrough' einige der Cognito-Felder explizit zugeordnet sind ('cognito-authentication-provider', 'cognito-authentication-type', 'cognito-identity-id'). "cognito-identity-pool-id". Aber sie sind alle leer, sobald das Lambda erreicht ist. Außerdem habe ich die 'authorizer-principal-id' überprüft, die ebenfalls leer ist. Irgendwelche Vorschläge? – evdh

+0

Sie können auf das "sub" zugreifen oder "email" durch "$ context.authorizer.claims.sub", "$ context.authorizer.claims.email" –

Antwort

2

Wenn Sie die Benutzerinformationen in Ihrem Backend anmelden müssen, können Sie $context.authorizer.claims.sub und $context.authorizer.claims.email verwenden, um die Unter und E-Mail für Ihren Cognito Benutzer Pool zu bekommen.

Hier ist die Dokumentation über Use Amazon Cognito Your User Pool in API-Gateway

+1

Ich versuchte dies aber ich bin immer leere Werte im Backend: { "Kontext": { "sub": "", "E-Mail": ""} } – Tejas

+0

@Ka Hou Ieong, es ist noch aktuell antworten? In den letzten Tagen habe ich ein paar Antworten gefunden, wie Ihre Kommentare, die in den letzten Tagen hinzugefügt wurden, dass diese "Ansprüche" und "$ Kontext" leer sind. – nicq

Verwandte Themen