node.js - AWS - Cognito Identity 与 Node.js - 如何处理 token

标签 node.js amazon-web-services amazon-cognito

所以我尝试在我的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 代理集成,则应确保在正文映射模板中传递这些值。

您可以找到代码示例 herehere .

关于node.js - AWS - Cognito Identity 与 Node.js - 如何处理 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43241586/

相关文章:

node.js - 仅使用 shell 部署应用程序

amazon-web-services - 结合使用 RDS 和 Digital Ocean Droplets

android - 如何在 Android 中使用 AWS S3 凭据上传内容

python - 如何在 Amazon EC2 上调试 Python 网站?

html - 如何自定义 Cognito 验证电子邮件中的链接?

amazon-web-services - CognitoIdentityCredentials 不提供访问权限

amazon-cognito - 放大 "Unable to verify secret hash for client"

node.js - 从上一个意图中获取后续意图中的参数

javascript - 如何使用 Promise 链接和共享先前的结果

node.js - 尽管安装了所有要求,但无法获取 Angular CLI 版本?