我对于将哪个ID用于以下用途感到有些困惑:
有一个在线书籍商店,里面有书籍和用户。每个用户可以拥有许多书籍。书籍及其关联的用户ID与书籍一起存储在DynamoDB表中。
问题是,将使用哪个用户ID?池用户ID或身份用户ID?谢谢。
答案 0 :(得分:1)
如果您希望用户能够直接对表进行读写,则需要使用身份池ID,因为这就是IAM评估请求时身份验证上下文中的内容。
如果这不是目的,而您只是出于内部目的而跟踪用户,则使用用户池ID可能会更容易。使用用户池ID,您可以查找用户属性等,而身份池ID则不是这种情况。
另一种说法是,如果要利用IAM进行授权(授予对事物的访问权限),则需要使用身份池ID(联合身份),但是如果要自己在应用程序代码中处理授权,永远不要让用户直接访问AWS资源,也不要让用户通过其他身份验证机制登录,那么使用用户池ID更有意义。
答案 1 :(得分:1)
您可以这样考虑:用户池提供了一种登录方法(即身份验证方法)。
此处,身份池提供了一种基于单个或多个登录方法(例如Facebook登录,Google登录,Cognito用户池登录)创建用户身份的方法,并进而创建了与该身份相关的IAM权限。与授权有关的更多内容-具有此身份的用户可以做什么。
也就是说,您仍然可以仅使用用户池用户ID来执行授权。您只需要根据“用户池属性”下存储的有关该用户的信息(例如,他们的电子邮件或姓名)自己编写自定义逻辑,以允许或拒绝他们访问某些书籍。
如果您最终希望允许用户使用多种登录来源(例如Facebook登录,Google登录,AWS Cognito登录),请考虑使用身份池用户ID。
在大多数情况下,如果让用户通过应用程序登录并通过该应用程序访问资源(在本例中为书籍),则存储用户池用户ID会使事情变得更容易。 Cognito会生成一个安全的用户池用户IDToken,其中包含登录时的用户ID。该应用程序可以将此令牌与后端请求一起传递,以允许/拒绝该请求。
答案 2 :(得分:0)
用户池存储用户记录,而身份池具有用户可用的必要权限。因此,在这种情况下,您需要使用用户池ID