AWS提供cognito,为开发人员提供注册和登录功能,包括与OpenId兼容身份提供商(如facebook,google等)的联合。
cognito开发者控制台中有两种类别。这些是管理用户池和管理联合身份。
我只是有点困惑,因为两者非常相似,即使我们想要提供我们的客户登录他们的Facebook帐户。 Cognito用户池本身提供联合身份验证和联合身份池,也由身份验证提供程序提供。
问题是,如果我想允许我的客户使用自己的Facebook帐户登录,我应该使用哪些类别?用户池或联合身份?
此外,如果我想在API网关中配置授权器,我必须创建cognito用户池但联合身份池。这是选择认知类别的主要原因吗?
答案 0 :(得分:19)
Cognito用户池:
Amazon Cognito用户池使开发人员可以轻松添加注册 和Web和移动应用程序的登录功能。它充当 您自己的身份提供者维护用户目录。它支持 用户注册和登录,以及配置身份令牌 对于已登录的用户。
Cognito联合身份或身份池:
另一方面,Cognito Identity Pool(或Cognito Federated Identities) hand是一种授权用户使用各种AWS服务的方法。 假设您希望允许用户访问您的S3存储桶 他们可以上传文件;您可以在创建时指定 身份池。并创建这些级别的访问权限 池有自己的身份(或用户)概念。这些的来源 身份(或用户)可以是Cognito用户池,甚至是Facebook或 谷歌。
用户池与标识池之间的关系:
Cognito Identity Pool只占用所有身份提供者并将它们放在一起(联合它们)。通过所有这些,它现在可以让您的用户安全地访问您的AWS服务,无论他们来自哪里。
总而言之,Cognito用户池会存储所有用户,然后插入Cognito Identity Pool,这样可以让用户访问AWS服务。
答案 1 :(得分:17)
您可以将用户池视为包含用户属性(如姓名,电子邮件,电话号码等)的目录。这还提供注册,登录功能。您可以将用户联合到用户池中。目前,您可以使用Facebook,Google和SAML作为用户池的身份提供商。
Cognito联合身份可让您将用户联合到AWS并发布可用于访问策略中允许的资源的AWS凭据。对于Cognito Federated Identities,您还可以配置各种身份提供商,例如Facebook,Google,以及Cognito用户池可以是身份提供者。
您使用的内容取决于您的使用案例。如果您的应用不需要AWS资源,则可能只需要用户池。
答案 2 :(得分:10)
我相信AWS应该将用户池和身份池分开,并更改名称。因为以相同的名称混淆不同的服务会引起混淆,并且名称不提供有关服务的任何线索。
更好地关注身份池。由于用户池只是MSAD,Google,Facebook,Auth0等其他身份提供者服务,因此身份提供者进行身份验证并提供令牌,例如MS AD用户的Kerberos令牌,或AWS Cognito Userpool用户的Cognito Userpool JWT令牌。然后,身份池可以使用令牌来授权对AWS资源的访问。
AWS一直在将这种身份提供者/身份验证服务与身份池/身份验证服务混合在一起,除了它们的奇怪名称之外,因此引起了巨大的混乱,引发了问题。
名称“身份池”没有任何意义,因为它没有指示服务的作用。一个词必须引导导致理解的思想,而不是混乱。 AWS恰恰相反。
在跳到身份池的功能之前,最好先了解一些事情。
天真地说,AWS STS Token允许我们以编程方式创建,使用,更新和删除AWS资源。
如果您有一个AWS账户用户,则可以为该用户获取AWS_ACCESS_KEY_ID和AWS_SECRET_ACCESS_KEY,然后使用例如外交部。
实际上,IAM角色定义了针对STS令牌的哪些AWS资源允许执行哪些操作。它可能不允许删除,但创建。因此,取决于SAM令牌允许我们做什么的IAM角色。
但是,需要注意的是,您获得的IAM角色和STS令牌之间存在关联,并且必须由他人来定义关联。
它提供了一个 STS令牌,您可以使用它来操纵AWS账户中的AWS资源。
AWS的另一个问题对我来说是他们的文档没有声明这是在您需要身份库时,而是重复重复 Federation 这个词,它并不指向什么。身份池确实可以允许您使用STS令牌来操纵AWS资源。
如果您处于以下情况:
然后,您可以使用身份池来获取帐户(例如您登录的Google)的STS令牌,并可以操纵AWS资源。
例如,如果您在公司AD中有1000多个用户,并且想让他们以某种方式使用AWS资源。您会创建1000多名AWS IAM用户吗?还是找到一种方法将它们映射到一些IAM角色,例如“管理员”,“会计”,“财务”,“ IT”?
身份池将身份提供者令牌(例如Google令牌)映射到AWS账户中的 IAM角色,并提供STS令牌。
在我的理解中,AWS将此称为“映射”,称为联盟。
我建议在讨论身份池时完全忘记用户池。用户池只是另一个身份提供商,您可能根本不需要。
同样,在讨论用户池时,我建议完全忘记身份池。
我确实希望AWS将Identity Provider Service(用户池)与Token Mapping Service(身份池)分开,以免引起混乱。
答案 3 :(得分:0)