【问题标题】:sendMessage to SQS from Browser从浏览器向 SQS 发送消息
【发布时间】:2015-04-07 19:31:59
【问题描述】:

我正在构建一个以 Django REST 作为后端的 SPA。现在我正在使用标准的 Django 身份验证系统和User 模型。

我希望 SPA 上运行的 JS 能够将消息插入 AWS SQS(即sendMessage)。

AWS 在浏览器中从 JS 调用 sendMessage 时有 these doc

他们还提供these docs 来说明如何验证用户身份。我现在的想法是使用 Amazon Cognito。来自FAQ

问:如果我注册并验证自己的用户会怎样?

Amazon Cognito 可以与您现有的身份系统集成。和 一个简单的 API 调用,您可以为最终用户检索 Cognito ID 基于您自己的用户唯一标识符。一旦你有 检索到 Cognito 提供的 Cognito ID 和 OpenID Token,您可以 使用 Cognito 客户端 SDK 访问 AWS 资源并进行同步 用户数据。

我是否更正了这一点,我需要:

  1. 为我系统中的每个用户创建一个 IAM 用户。还是我只需要一个 IAM 角色?
  2. 当用户登录我的站点(Django 后端)时,我将拥有我的后端然后生成"a simple API call [to] retrieve a Cognito ID"
  3. 在用户加载 SPA 时发送该 Cognito ID。
  4. 使用浏览器中运行的 JS 中的 Cognito ID 调用 sendMessage 到 SQS 队列

我在这里遗漏了什么吗?有没有办法删除 Django 用户后端和用户 IAM 用户,这样我就可以避免让两个用户列表保持同步?我找到了this project,但似乎没有维护。

更新: 似乎可能有另一种方法可以做到这一点,我根本不使用 Cognito,而是公开一个可以sign requests, "Query Request Authentication" 的端点。 This Heroku page 谈了一些关于构建签名服务的事情。

这实际上是一种替代选择吗?如果是,这些方法的优缺点是什么?

【问题讨论】:

    标签: amazon-web-services amazon-sqs amazon-iam aws-sdk amazon-cognito


    【解决方案1】:

    Amazon Cognito 不需要您注册 IAM 用户,只需注册 2 个 IAM 角色。对您需要做的事情稍作修改:

    1. 创建一个 Amazon Cognito 身份池,使用您的开发人员提供商进行配置。
    2. 更新与您的池关联的 IAM 角色以允许访问您想要的服务(例如 SQS)。
    3. 从您的 Django 后端调用 GetOpenIdTokenForDeveloperIdentity 以获取该用户的 OpenId Connect 令牌和身份 ID,然后将其返回给您的 JS 应用程序。
    4. 在 JS SDK 中配置您的 CognitoCredentials。在登录映射中,使用键 cognito-identity.amazonaws.com 和值作为从 Django 后端返回的令牌。
    5. 使用 JS SDK 从您的应用程序调用 SQS 或您希望的任何其他服务。

    虽然可以为 SQS 使用预签名 URL,但将 Cognito 与 JS SDK 结合使用将允许您利用 SDK 支持的其他服务(DynamoDB、SNS、S3 等)。

    【讨论】:

    • 如果我想对给定用户sendMessage 可以插入的数量进行速率限制,pre-signed URLCognito 方法是否有某种机制允许这样做?一种想法是检查预签名的速率并设置一个非常短的到期时间,但这并没有明确控制发送次数。
    • @AlexRothberg 不幸的是,这两种解决方案都不允许这种级别的控制。
    • 是否可以限制可以为DelaySeconds 设置的值?即我总是想使用队列默认值?
    • @AlexRothberg 不幸的是,SDK 只能执行 API 中可用的限制。
    猜你喜欢
    • 1970-01-01
    • 2013-04-02
    • 2010-12-12
    • 2023-03-23
    • 2020-02-18
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2021-07-11
    相关资源
    最近更新 更多