5

Pracuję nad implementacją bramy AWS API Gateway z serwerem Lambda. Używam integracji API Gateway z Cognito Userpools (całkiem nowe) zamiast budować niestandardowego autoryzatora za pomocą Lambda (który był zalecany przed jego zintegrowaniem).AWS API Gateway/Cognito Userpools/Lambdas nie mogą przekazywać poświadczeń dzwoniącego

Utworzono proof of concept (javascript), który uwierzytelnia użytkownika za pomocą Cognito, a następnie nawiązuje połączenie z bramą API przy użyciu tych poświadczeń. Więc, zasadniczo, wywołanie końcowe do bramki API jest z tokenem JWT, który otrzymałem od Cognito (result.idToken.jwtToken) w nagłówku Authorization. To wszystko działa i mogę potwierdzić, że tylko z tym tokenem można uzyskać dostęp do interfejsu API.

Wszystko działa dobrze, ale teraz chcę uzyskać dostęp do tożsamości Cognito w mojej Lambdzie; na przykład identyfikator tożsamości lub imię i nazwisko lub adres e-mail. Przeczytałem, jak zmapować wszystkie parametry, ale w rzeczywistości używam tylko standardowego szablonu "Prześlij żądanie podania metody" w żądaniu integracji. Loguję wszystkie parametry w lambda i wszystkie parametry "cognito" są puste.

Przejrzałem wiele podobnych pytań, a wszystkie one proponują włączenie pola wyboru "Wywołaj z danymi uwierzytelniającymi dzwoniącego" na żądanie integracji. To ma sens.

Jednak, ta opcja może być włączona tylko wtedy, gdy używasz AWS_IAM jako zezwolenia i nie jeśli wybraniu Cognito UserPool. Po prostu nie można go wybrać i jest faktycznie wyłączony.

Czy ktoś wie, co zrobić w tym przypadku? Czy to wciąż trwa? Czy jest jakiś powód, dla którego nie możesz tego włączyć i uzyskać poświadczenia Cognito w twojej Lambdzie?

Wielkie dzięki.

+0

Możesz podzielić się przypadek użycia, które są potrzebne poświadczenia abonenta z Cognito UserPool ponieważ można uzyskać dostęp do głównego identyfikację użytkownika w funkcji lambda? –

+0

Pewnie; musimy logować/przechowywać pewne informacje o tym, który użytkownik uzyskał dostęp do danych (oraz trochę więcej informacji) do raportowania. W tym celu potrzebujemy więcej informacji o użytkowniku. Spodziewam się, że zostanie wysłana, ponieważ w szablonie "Prześlij żądanie podania metody" niektóre pola cognito są jawnie zamapowane ("dostawca uwierzytelniania cognito", "typ uwierzytelniania cognito", "cognito-identity-id" , "cognito-identity-pool-id" .Ale wszystkie są puste po osiągnięciu lambda.Również sprawdziłem 'authorizer-principal-id', który jest również pusty.Wszelkie sugestie? – evdh

+0

Możesz uzyskać dostęp do "sub" lub "e-mail" przez "$ context.authorizer.claims.sub", "$ context.authorizer.claims.email" –

Odpowiedz

2

Jeśli musisz zalogować informacje użytkownika w swojej backend, można użyć $context.authorizer.claims.sub i $context.authorizer.claims.email uzyskać sub i email dla swojej puli użytkownika Cognito.

Oto dokumentacja API o Use Amazon Cognito Your User Pool w bramie

+1

próbowałem tego, ale jestem coraz pustych wartości na backend: { "kontekst": { "sub": "", "email": "" } } – Tejas

+0

@Ka Hou Ieong, czy to nadal aktualna odpowiedź? W ostatnich dniach znalazłem kilka odpowiedzi, takich jak twoje z dodanymi w ostatnich dniach komentarzami, że te "roszczenia" i "kontekst $" są puste. – nicq