【问题标题】:AWS Cognito Temporary Credentials in CookieCookie 中的 AWS Cognito 临时凭证
【发布时间】:2017-03-25 06:19:18
【问题描述】:

我正在编写一个 Ember 应用程序,我希望允许用户上传 pdf 文件,并且我正在使用 AWS S3 进行文件存储。因为我不想硬编码我的 AWS 凭据,所以我使用 AWS Cognito 创建临时凭证,以便在用户想要上传/下载文件时对 S3 进行身份验证。我在 AWS 上为用户创建了一个身份池,并为经过身份验证和未经身份验证的用户配置了关联的 IAM 角色(经过身份验证的用户可以只读访问我的 S3 存储桶之一)。我正在使用我的 Rails 后端(使用 Devise)作为身份池的身份验证提供程序。对于我的前端身份验证,我使用 Ember Simple Auth 和提供的 Devise 身份验证器,因此用户必须登录才能请求令牌。以下是我获取临时凭证的步骤:

1) 从我的后端获取 AWS Cognito 身份 ID 和令牌(在我的后端使用来自 Ruby AWS 开发工具包的 get_open_id_token_for_developer_identity 方法)

2) 使用 Identity Id 和 Token 创建一个新的 CognitoIdentityCredentials 对象以获取临时凭据,并将凭据存储在 cookie 中(使用 js-cookie)。

代码:

        var AWS = window.AWS;
        AWS.config.region = "us-west-2";
        AWS.config.credentials = new AWS.CognitoIdentityCredentials({
            IdentityPoolId: 'us-west-2:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
            IdentityId: response.identity_id,
            Logins: {
                'cognito-identity.amazonaws.com': response.token
            }
        });
        AWS.config.credentials.get(function() {
            var date = new Date(AWS.config.credentials.expireTime);
            Cookies.set("cognito_creds", { accessKeyId: AWS.config.credentials.accessKeyId, secretAccessKey: AWS.config.credentials.secretAccessKey, sessionToken: AWS.config.credentials.sessionToken }, { expires: date } );
        });  

我了解在 cookie 中存储 AWS 凭证等重要信息是一个很大的禁忌,而且绝对不安全。但请记住,我使用的是 HTTPS,凭证在一小时后过期,并且与凭证关联的 IAM 角色仅授予对我的一个 S3 存储桶的只读访问权限。

我的问题是:将这些凭据存储为 cookie 是否值得冒安全风险,这样我就不必在每次页面刷新时都从后端获取令牌,还是这种方法让我太容易受到攻击?

编辑:澄清一下,我正在考虑的替代解决方案是将凭据作为属性存储在前端的 Ember 服务上,并在每次页面重新加载时从我的后端获取一个令牌,但这不是看起来很有效率。

【问题讨论】:

    标签: amazon-web-services cookies ember.js amazon-s3 amazon-cognito


    【解决方案1】:

    This previous question 有一些相似的方面,可能值得一读。简短的版本是,应该没问题。听起来您已经完美地缩小了凭据范围,因此如果您选择保存它们,您就限制了爆炸半径。

    如果您想降低延迟,这不是一个坏方法。如果您愿意牺牲这种延迟或担心可以从 S3 读取的内容的隐私,您可以远程获取它们。

    【讨论】:

      猜你喜欢
      • 2021-01-05
      • 1970-01-01
      • 2021-09-05
      • 1970-01-01
      • 2019-12-06
      • 1970-01-01
      • 2016-05-10
      • 2021-10-30
      • 2018-03-28
      相关资源
      最近更新 更多