0

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

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

AWS在浏览器中有这些关于从 JS调用的文档。sendMessage

他们还提供了有关如何验证用户身份的文档。我现在的想法是使用 Amazon Cognito。从常见问题解答

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

Amazon Cognito 可以与您现有的身份系统集成。通过一个简单的 API 调用,您可以根据您自己的用户唯一标识符为您的最终用户检索 Cognito ID。检索 Cognito ID 和 OpenID 令牌 Cognito 提供后,您可以使用 Cognito 客户端 SDK 访问 AWS 资源并同步用户数据。

我是否纠正了这个问题,我需要:

  1. 为我系统中的每个用户创建一个 IAM 用户。还是我只需要一个 IAM 角色?
  2. 当用户登录我的网站(Django 后端)时,我会让我的后端进行“一个简单的 API 调用 [to] 检索 Cognito ID”
  3. 当用户加载 SPA 时发送该 Cognito ID。
  4. 使用浏览器中运行的 JS 中的 Cognito ID 调用sendMessageSQS 队列

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

更新: 似乎有一种替代方法可以做到这一点,我根本不使用 Cognito,而是公开一个可以签署请求的端点,“Query Request Authentication”这个 Heroku 页面讨论了一些关于构建签名服务的内容。

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

4

1 回答 1

0

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 等)。

于 2015-02-10T04:56:40.923 回答