我正在开发一个简单的应用程序(ios),每个用户都可以向其他用户(他们的Facebook好友)发送简单的消息(由几个数据插槽组成,目前全部为字符串)。人们通过Cognito使用其Facebook帐户登录,我使用DynamoDB中的单个表来管理用户帐户,其中主键是Facebook id(次要键是唯一的消息id)。当用户A向用户B发送消息时,将向表中添加两行几乎相同的行,它们包含消息,它们之间唯一的区别是主键(一个是A的Facebook id,另一个是B的)。因此,当用户登录并检查其帐户时,她检索与她的Facebook id对应的所有行,从而访问她发送的消息和发送给她的消息。
目前,每个用户都可以访问表中的所有行,这是一种安全漏洞。我查看了一些文档,似乎可以通过在这种情况下向IAM策略添加以下代码段来执行细粒度访问控制:
很遗憾,
是否有任何可能的解决方案,同时仍保持 Cognito,或者我应该在没有 Cognito 的情况下验证用户?此外,欢迎对我的应用程序设计提出任何意见和批评。
目前,每个用户都可以访问表中的所有行,这是一种安全漏洞。我查看了一些文档,似乎可以通过在这种情况下向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,或者我应该在没有 Cognito 的情况下验证用户?此外,欢迎对我的应用程序设计提出任何意见和批评。