【问题标题】:Amazon AWS getAttribute() using AWS.config.credentials使用 AWS.config.credentials 的 Amazon AWS getAttribute()
【发布时间】:2018-08-11 07:55:05
【问题描述】:

我刚开始使用 Amazon Cognito,我想将它用于我的 Web 应用程序。我想开发一个无状态应用程序,在其中我使用 Cognito 注册/登录,然后在其余请求中使用 JWT 令牌。

我已经使用amazon-cognito-identity-js 包在 Node.js 中实现了注册和登录流程,然后使用 JWT 令牌使用 aws-sdk 调用 lambda 函数。到这里为止,一切都和预期的一样。

但现在问题在于不同的用户操作,如get attributeverify attributeupdate password 等,如所列@ https://docs.aws.amazon.com/cognito/latest/developerguide/using-amazon-cognito-user-identity-pools-javascript-examples.html

所有这些操作都需要cognitoUser 对象,并且在文档中它们使用userPool.getCurrentUser(); 表达式。

我在某处读到此方法返回最后一个经过身份验证的用户。所以我认为userPool.getCurrentUser();这个表达式会引起冲突。例如,如果 UserB 在 UserA 和 UserA 尝试更新他的密码后登录,它将无法正常工作。

有人可以建议我有什么可能的解决方案吗?

  1. 我应该将cognitoUser 对象存储在服务器端的会话中吗? [这个解决方案打破了我的无状态要求,我将不得不在服务器端维护会话。]
  2. 有没有办法使用 JWT 令牌执行这些操作?

如果您能想到任何其他更好的方法来在 Web 应用程序中实现 Cognito,请提出建议。

谢谢。

【问题讨论】:

    标签: amazon-web-services amazon-cognito


    【解决方案1】:

    我们有一个使用 cognito 和 lambdas 的无状态应用程序。

    我们设置的方式是不直接调用 lambdas,而是使用 Api Gateway 和 lambda-proxy 集成。

    如果您直接从前端代码调用 lambda,并使用 cognito 令牌进行身份验证,那么您需要在每个 lambda 中放置大量逻辑来验证令牌,例如下载相关密钥,检查 jwt 的签名、时间戳、颁发者等。如果您使用 API 网关,则只需 create a cognito authorizer 并将其放在您的 lambda 前面。

    我们在进行 api 调用时传递 id_token,然后调用由授权方验证,lambda 接收用户池中设置的所有当前属性。这意味着我们不需要进行额外的调用来获取属性。

    如果您在用户池客户端设置中允许更改用户密码,可以通过调用 cognito api with the access_token 从应用的前端完成。

    【讨论】:

    • 谢谢@Ravenscar,我会试试授权人。你能告诉我你是如何处理令牌刷新的吗?我想如果 id_token 过期,API 网关将返回UnAuthorized。同样对于使用 access_token 调用 cognito api,调用的 URL 是什么?
    • @Vicky 令牌刷新这不是好消息,大约六个月前我在这里打开了一个 github 问题:github.com/aws/amazon-cognito-auth-js/issues/92 至于使用 access_token 调用它,我们使用了上面链接的 api aws-sdk 但使用 access_token 而不是配置 IAM。
    • 谢谢@Ravenscar。你很有帮助。
    猜你喜欢
    • 2017-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-14
    • 2015-04-30
    • 2014-12-28
    • 2015-09-10
    • 2016-12-09
    相关资源
    最近更新 更多