Cognito 用户池和身份池是比 SAML 和 STS 更高级别的抽象。让我们从定义什么是 SAML 和 STS 开始:
SAML通过提供一种对用户进行一次身份验证,然后将该身份验证传递给多个应用程序的方式,使单点登录 (SSO) 技术成为可能。
STS是一项 Web 服务,可让您为 AWS Identity and Access Management (IAM) 用户或您进行身份验证的用户请求临时的有限权限凭证
基本上,SAML 是一种将一个应用程序生成的身份验证令牌传输到另一个应用程序的方法,而 STS 是一种从 AWS 获取授权令牌(即 AWS 凭证)的方法。
另一方面,现在我们有 Cognito 用户和身份池:
用户池提供身份验证,如 SAML,但它们也提供用户数据库。SAML 不这样做,因此如果您想保留用户数据、添加、更改等,您需要自己做。SAML 允许您做的所有事情就是将这些用户的身份验证卸载到另一方。但是,您必须编写所有代码才能进行身份验证。
用户池可以自己使用 SAML 身份验证提供程序,或执行自己的内置身份验证。但无论哪种情况,您最终都会得到一个用户实体,该用户实体位于 Cognito 中并具有与之关联的数据。
身份池提供授权,即决定允许(通常经过身份验证,但不总是)用户做什么。他们确实在后台使用 STS 来获取启用特定操作的令牌,但身份池会根据用户特征选择是否授予以及授予什么凭据。身份池依赖于身份验证提供者来确定用户是谁;此提供者也可以是用户池或 SAML 提供者。身份池将根据提供者自动检查给定的身份验证令牌是否有效,并且它们允许用户获取某些授权令牌。
总之,Cognito 用户池和 Cognito 身份池封装了您通常需要自己编写以从 SAML 提供程序到用户数据库的功能,再到用户到权限的映射,再到能够检索这些权限的 AWS 凭证。它们允许您配置用户池以使用给定的提供程序(或 Cognito 自己的身份验证),而不是对 SAML 提供程序进行身份验证调用(或实施您自己的身份验证)、实施用户数据库,然后为用户的权限制作 AWS 凭证),将一个身份池指向用户池,并告诉身份池用户池的成员应该拥有哪些权限。其余的一切都在后台为您完成。