簡體   English   中英

AWS - 使用nodejs的Cognito Identity - 如何處理令牌

[英]AWS - Cognito Identity with nodejs - What to do with tokens

所以我試圖在我的nodejs API中使用Cognito Identity。 我使用Cognity Identity的目的是能夠為用戶提供一種安全的方式來創建用戶帳戶並登錄。我想使用我的API通過識別用戶的電子郵件地址來驗證用戶身份。 然后,我的API將根據用戶的電子郵件向用戶提供訪問權限。

我能夠創建用戶,驗證用戶的電子郵件,並登錄以獲取AccessToken,IDToken和RefreshToken。 這很好,但在這一點上,我不完全確定如何處理這些令牌。 我想我可以以某種方式使用它們來驗證用戶每次調用我的API,但我不確定如何做到這一點。

我想象認證流程是這樣的:

用戶使用他們的密碼登錄 - >我的API調用aws來獲取令牌 - >我的API將這些令牌傳遞回用戶的移動設備 - >他們的移動設備存儲這些令牌 - > AccessToken用於驗證所有API調用,直到它到期 - >如果AccessToken過期,RefreshToken用於獲取一組新標記 - >如果RefreshToken過期,用戶必須再次使用用戶名/密碼登錄。

這是不正確的還是不正確的做法? 如果我有正確的想法,那么我如何使用令牌來實現這一目標? 一旦用戶獲得其令牌,我就無法找到有關身份驗證過程的任何文檔。 我能找到的唯一可以實現此目的的是: http//docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#initiateAuth-property

您的下一步取決於您使用的服務以及使用方式。

例如,對於使用Lambda / API Gateway的API驅動的應用程序,您將使用Amazon Cognito用戶池作為API資源方法,並將ID令牌作為API調用的Authorization標頭發送。 (是的,該名稱具有誤導性。它應該是身份驗證,因為授權邏輯實際上是在您的Lambda函數中實現的)

然后,您的Lambda函數可以使用context對象(當您啟用Lambda代理集成時 )從用戶池訪問身份聲明屬性,如下所示:

const email = context.authorizer.claims.email;

要么

const cognitoGroups = context.authorizer.claims['cognito:groups'];

如果尚未啟用Lambda代理集成 ,則應確保在正文映射模板中傳遞這些值。

您可以在此處此處找到代碼示例。

有一個很好的參考github應用程序,它演示了cognito的各個方面以及如何與lambda,API Gateway,DynamoDB和其他AWS服務集成。

這是一個鏈接: https//github.com/awslabs/aws-serverless-auth-reference-app

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM