【发布时间】:2018-09-11 01:06:02
【问题描述】:
我正在开发一个简单的应用程序 (ios),每个用户都可以向其他用户(他们的 Facebook 朋友)发送简单的消息(每个消息都由几个数据槽组成,目前都是字符串)。人们通过 Cognito 使用他们的 Facebook 帐户登录,我使用 DynamoDB 中的单个表管理用户帐户,其中主键是 Facebook id(辅助键是唯一的消息 id)。当用户 A 向用户 B 发送消息时,表中添加了两个几乎相同的行,它们包含消息,它们之间的唯一区别是主键(一个是 A 的 facebook id,另一个是 B 的)。因此,当用户登录并检查他的帐户时,她会检索与她的 facebook id 对应的所有行,从而访问她发送的消息和已发送给她的消息。
目前,每个用户都可以访问表中的所有行,这是一个安全漏洞。我查看了一些文档,在这种情况下,似乎可以通过将以下 sn-p 添加到 IAM 策略来执行细粒度的访问控制:
"Condition": {
"ForAllValues:StringEquals": {
"dynamodb:LeadingKeys": [
"${graph.facebook.com:id}"
]
}
}
不幸的是,${graph.facebook.com:id} 不适用于 Cognito,我应该改用 ${cognito-identity.amazonaws.com:sub} 来识别用户。问题是使用后者需要使用 Cognito id 作为主键而不是 Facebook id,这导致了我的问题:可以获得朋友的 Facebook id 而不是他们的 Cognito id,这使得无法发送消息到他们使用以前的架构。
在仍然保留 Cognito 的同时是否有任何可能的解决方案,或者我应该在没有它的情况下对用户进行身份验证?此外,欢迎对我的应用程序设计提出任何评论和批评。
【问题讨论】:
标签: amazon-web-services amazon-dynamodb amazon-iam amazon-cognito