【问题标题】:AWS SDK for JS in Browser with a CognitoUser instead of IAM credentials?AWS SDK for JS in Browser 使用 CognitoUser 而不是 IAM 凭证?
【发布时间】:2019-04-18 02:45:52
【问题描述】:

我有一个与 S3 交互的浏览器应用程序。由于它主要是一个内部工具,在处理 API 身份验证后,它直接收到一个非常受限的 IAM 用户的 ID 和密钥,然后用于在浏览器中设置 AWS 开发工具包。

我现在正在尝试更改该应用以使用 Cognito 进行身份验证,以便外部用户可以访问它而不会损害我们的安全性。

我最终使用 AWS Amplify 来处理身份验证部分,现在我想弄清楚是否有办法使用我从 Cognito 获得的凭证来设置 AWS JavaScript SDK 并从中复制相同的功能点上。 (Amplify 目前处理与 S3 交互的方式并不能满足应用的所有需求)

有没有办法做到这一点?我发现 SDK 文档非常混乱,并且无法确定我正在尝试做的事情是否可以完成。

此外,如果有办法仅使用 JS SDK(不使用 Amplify)通过 Cognito 登录用户,那对我来说也更可取,但这是次要问题。

【问题讨论】:

    标签: amazon-web-services amazon-s3 amazon-cognito aws-sdk-js


    【解决方案1】:

    是的,您可以使用 Amplify 轻松做到这一点,我推荐这种方法。

    这是文档中使用 AWS JS SDK 中的 Route53 模块的示例,但您当然可以使用任何 AWS 模块。

    通过https://aws-amplify.github.io/docs/js/authentication#working-with-aws-service-objects

    import Route53 from 'aws-sdk/clients/route53';
    
    Auth.currentCredentials()
      .then(credentials => {
        const route53 = new Route53({
          apiVersion: '2013-04-01',
          credentials: Auth.essentialCredentials(credentials)
        });
    
        // more code working with route53 object
        // route53.changeResourceRecordSets();
      })
    

    【讨论】:

    • 嗨,如果我不清楚,我很抱歉:我明确地尝试在没有 Amplify 的情况下执行此操作。这需要我找出一个全新的框架并重构我的整个应用程序。关于示例:传递给 essentialCredentials 的“凭据”变量中存储了什么?
    • Auth.currentCredentials() 返回的值是一个 CognitoIdentityCredentials。更多信息在这里aws-amplify.github.io/amplify-js/api/classes/…
    • 您是否尝试过使用 Amplify 的 Auth.essentialCredentials 函数将您从 Cognito 获得的凭证转换为可以传递给 AWS JS 服务对象的凭证?
    • 谢谢,确实有效。我不明白这些凭证方法是 Amplify 而不是 aws-sdk-js 方法(并不是说您的帖子对此并不完全清楚,我只是读得太快了)。你为什么推荐放大?
    • 我是 AWS Amplify 的两个部分的粉丝:JS 库和 CLI 工具链。我喜欢 JS 库,因为它在比 AWS JS SDK 更高的抽象级别上运行,这意味着使用 Amplify 可以更容易地获得一些常见的操作。我喜欢 CLI 工具链,因为它使开始生成 AWS CloudFormation 模板变得非常容易。这两个项目进展迅速,我仍然很高兴看到它们如何改进。
    猜你喜欢
    • 2019-01-06
    • 2020-08-17
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    • 2021-05-02
    • 2018-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多