所以我尝试在我的nodejs API 中使用Cognito Identity。我使用 Cognity Identity 的目标是能够为用户提供一种安全的方式来创建用户帐户并登录。我想使用我的 API 进行 aws cognito 调用,通过使用电子邮件地址识别用户来验证用户。然后,我的 API 将根据用户身份(基于他们的电子邮件)向用户授予访问权限。
我能够创建用户、验证用户的电子邮件并登录以获取 AccessToken、IDToken 和 RefreshToken。太好了,但目前我不完全确定如何处理这些 token 。我想我可以以某种方式使用它们来验证用户每次调用我的 API,但我不确定如何做到这一点。
我想象身份验证流程是这样的:
用户使用密码登录 -> 我的 API 调用 aws 来获取 token -> 我的 API 将这些 token 传回用户的移动设备 -> 他们的移动设备存储这些 token -> AccessToken 用于验证所有 API 调用,直到其过期 -> RefreshToken 用于在 AccessToken 过期时获取一组新的 token -> 如果 RefreshToken 过期,用户必须使用用户名/密码再次登录。
这是不正确或不恰当的做法吗?如果我有正确的想法,那么我该如何使用代币来实现这一目标?用户获得 token 后,我无法找到有关身份验证过程的任何文档。我能找到的唯一似乎能够实现这一点的东西在这里:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CognitoIdentityServiceProvider.html#initiateAuth-property
最佳答案
您的下一步取决于您使用的服务以及使用方式。
例如,对于具有 Lambda/API Gateway 的 API 驱动应用程序,您需要 use Amazon Cognito User Pools对于您的 API 资源方法,并将 ID token 作为 Authorization
header 与您的 API 调用一起发送。 (是的,这个名称具有误导性。它应该是身份验证,因为授权逻辑实际上是在您的 Lambda 函数中实现的)
然后,您的 Lambda 函数可以使用 context
对象(当您启用 Lambda 代理集成时)从用户池访问身份声明属性,如下所示:
const email = context.authorizer.claims.email;
或
const cognitoGroups = context.authorizer.claims['cognito:groups'];
如果您尚未启用 Lambda 代理集成,则应确保在正文映射模板中传递这些值。
关于node.js - AWS - Cognito Identity 与 Node.js - 如何处理 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43241586/