2017-04-05 130 views
1

所以我試圖用Cognito認同我的API的NodeJS做。我使用Cognity Identity的目標是能夠爲用戶提供一種安全的方式來創建用戶帳戶並登錄。我想使用我的API來使aws cognito調用通過用他們的電子郵件地址識別用戶來驗證用戶。然後,我的API將根據用戶的身份(基於他們的電子郵件)爲用戶提供訪問權限。AWS - Cognito與身份的NodeJS - 怎麼用令牌

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

我想象的認證流程會是這樣的:在與他們的密碼

用戶登錄 - >我的API進行調用以AWS獲得令牌 - >我的API傳遞這些令牌返回給用戶的移動設備 - >他們的移動設備存儲這些令牌 - > AccessToken用於驗證所有API調用,直至過期 - >如果AccessToken過期,則使用RefreshToken獲取一組新令牌 - >如果RefreshToken過期,則用戶必須使用用戶名/密碼登錄再次。

是不正確的或這樣的方式不當?如果我有正確的想法,那麼我如何使用令牌來實現這一點?一旦用戶獲得他們的令牌,我就無法在認證過程中找到任何文檔。我能找到的唯一東西似乎可以實現:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#initiateAuth-property

+0

你見過嗎? http://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-with-identity-providers.html –

+0

@JeffBailey我已經看到了。我希望通過一些代碼示例:)。他們的描述給了我一個應該如何工作的想法,但沒有實際應用這些知識的手段。 –

+0

你見過樣品嗎?它們包括刷新和使用訪問令牌(我相信),還有一篇關於使用ID令牌用於APIGW的博客文章。 –

回答

0

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

例如,對於使用Lambda/API網關的API驅動的應用程序,您可以使用use Amazon Cognito User Pools作爲API資源方法,並將ID標記作爲Authorization頭與您的API調用一起發送。 (是的,名字是誤導性的。它應該是認證因爲授權邏輯是你的lambda函數實際執行)

然後,你的lambda函數可以使用context對象從用戶羣訪問身份要求性能(當您啓用LAMBDA代理集成)爲:

const email = context.authorizer.claims.email; 

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

如果您還沒有啓用Lambda代理集成,您應該確保在身體映射模板中傳遞這些值。

你可以找到的代碼示例herehere

+0

我的API目前不會使用任何其他AWS服務。這是我可能在做的事情,但現在我只想使用AWS Cognito來授權和識別用戶。一旦我可以驗證用戶,我的API將處理其餘的。 –