我正在构建一个以Django REST为后端的SPA。现在我使用的是标准的Django身份验证系统和User
模型。
我希望运行在SPA上的JS能够将消息插入AWS SQS(即sendMessage
)。
AWS在浏览器中有关于从JS调用sendMessage
的文档。
他们还提供了关于如何对用户进行身份验证的文档。我现在的想法是使用亚马逊干邑。来自常见问题解答:
Q: 如果我注册并验证自己的用户,该怎么办?
Amazon Cognito可以与您现有的身份系统集成。具有一个简单的API调用,您可以为最终用户检索Cognito ID基于您自己的用户唯一标识符。一旦你检索Cognito提供的Cognito ID和OpenID令牌,您可以使用Cognito客户端SDK访问AWS资源并进行同步用户数据。
我正确吗,为了让它发挥作用,我需要:
- 为我的系统中的每个用户创建一个IAM用户。还是我只需要一个IAM角色
- 当用户登录我的网站(Django后台)时,我会让我的后台进行"一个简单的API调用[以]检索Cognito ID"
- 当用户加载SPA时发送该Cognito ID
- 使用浏览器中运行的JS中的Cognito ID将
sendMessage
调用到SQS队列
我是不是遗漏了什么?有没有办法删除Django用户后端,只删除用户IAM用户,这样我就可以避免保持两个用户列表的同步?我找到了这个项目,但它似乎没有得到维护。
更新:似乎有一种替代方法可以做到这一点,我根本不使用Cognito,而是公开一个可以对请求进行签名的端点,即"查询请求身份验证"。这个Heroku页面介绍了一些关于建立签名服务的内容。
这实际上是一种替代选择吗?如果是,这些方法的利弊是什么?
Amazon Cognito不需要注册IAM用户,只需要注册两个IAM角色。对你需要做的事情稍作修改:
- 创建一个AmazonCognito身份池,与您的开发人员提供商一起配置
- 更新与您的池关联的IAM角色,以允许访问您想要的服务(例如SQS)
- 从Django后端,调用GetOpenIdTokenForDeveloperIdentity获取该用户的OpenIdConnect令牌和身份Id,并将其返回到JS应用程序
- 在JS SDK中配置您的CognitoCredentials。在登录映射中,使用键cognitoidentity.amazonaws.com和从Django后端返回的值作为令牌
- 使用JS SDK从应用程序中调用SQS或任何其他您希望的服务
虽然使用预先签名的URL进行SQS可以工作,但将Cognito与JS SDK一起使用将允许您利用SDK支持的其他服务(DynamoDB、SNS、S3等)。