0

我有一個體繫結構,我正在使用Cognit用戶池授權者的API網關,並且我從客戶端ReST呼叫的授權標頭中傳遞IdToken。帶有Cognito用戶池授權者和Lambda的API網關

它工作正常。

我需要Lambda中的cognitoIdentityId。

在API網關試過身體模板映射在合併請求

內容類型 - 應用程序/ JSON

{ 
"cognito-identity" : "$context.identity.cognitoIdentityId" 
} 

它不發送identityid(事件或上下文),並把它轉換我的有效載荷僅限於此json。

如何在這種情況下獲得Lambda中的身份標識,並且我的負載保持不變?

回答

4

Cognito身份標識只有在您使用Cognito身份憑證時纔可用。如果您想獲取有關通過athorizer授權的Cognito用戶池用戶的信息,它將在context.authorizer.claims地圖中可用。

有關更多詳細信息,請參見this documentation。此外,如果您希望此值在您的Lambda函數中可用,它將位於event.requestConext.authorizer.claims映射中(如果您使用的是Lambda代理集成),或者您已選擇映射到的任何位置它與您的映射模板(如果您不使用代理集成)。

+0

我在設置代理集成後將 event.requestContext.identity.cognitoIdentityId設置爲null。雖然我在授權人中獲得了其他值作爲電子郵件,分支,審計等。 那麼,我只是從postman傳遞授權標頭中的idToken。我不打算使用任何客戶端AWS-SDK進行認知。 我的設置是在這個論壇上的帖子描述: https://forums.aws.amazon.com/thread.jspa?threadID=252838 我的目標是讓identityId,這樣我可以得到暫時祕密密鑰和accessKey getCredentialsForIdentity in cognitoidentity。 – dan

+0

同樣,如果您使用的是Cognito User Pool Authorizer,cognitoIdentityId將永遠不會被填充。 –

+0

那麼如何通過這種架構獲得身份ID?或者如何通過這種方式獲得臨時的secretKey和accessKey?我只是好奇 - 爲什麼你們限制我們 - 「如果你使用Cognito用戶池授權者,cognitoIdentityId永遠不會被填充」? – dan

2

CognitoIdentityId來自Federated Identity Pool。如果你想要一個身份ID,那麼你必須在AWS Cognito Federated Identities中用你的AWS Cognito User Pool創建一個身份池。 Click here

然後,您需要驗證您的UserPool用戶,它將返回您的JWT Tokens (IdToken, AccessToken and RefreshToken)。使用此IdToken,您可以撥打GetId方法Cognito Federated Identities API以獲取IdentityId。

+0

但沒有辦法通過某個集成請求映射模板將Cognito ID添加到我的lambda中? –

相關問題