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.
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? –
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
Możesz uzyskać dostęp do "sub" lub "e-mail" przez "$ context.authorizer.claims.sub", "$ context.authorizer.claims.email" –