amazon-web-services - AWS : Amazon Cognito vs STS and SAML

标签 amazon-web-services amazon-cognito aws-sts

在 AWS 官方 documentation关于 Cognito,在用例大纲中指出:

1.In the first step your app user signs in through a user pool and receives user pool tokens after a successful authentication.

2.Next, your app exchanges the user pool tokens for AWS credentials through an identity pool.

3.Finally, your app user can then use those AWS credentials to access other AWS services such as Amazon S3 or DynamoDB.



通过 token 分配“AWS 凭证”的目标不是通过 实现的吗? STS ?

Cognito 和 STS 在授予非 AWS 用户访问 AWS 服务(例如 S3 或 EC2)的权限方面究竟有什么不同?

同一文档来源还指出 Cognito 也适用于 AWS 和第三方身份提供商(例如社交 - 例如 Facebook - 或 AD 公司)之间的身份联合。

这不是也通过 SAML 联合实现的(即首先让 AWS 和 IdP 建立基于 SAML 的信任关系?)

最佳答案

Cognito 用户池和身份池是比 SAML 和 STS 更高级别的抽象。让我们从定义什么是 SAML 和 STS 开始:

SAML makes single sign-on (SSO) technology possible by providing a way to authenticate a user once and then communicate that authentication to multiple applications.


STS is a web service that enables you to request temporary, limited-privilege credentials for AWS Identity and Access Management (IAM) users or for users that you authenticate


基本上,SAML 是一种将一个应用程序生成的身份验证 token 传输到另一个应用程序的方法,而 STS 是一种从 AWS 获取授权 token (即 AWS 凭证)的方法。
现在,另一方面,我们有 Cognito 用户和身份池:
用户池 提供身份验证,如 SAML,但它们也提供用户数据库。 SAML 不会这样做,因此如果您想保留用户数据、添加数据、更改数据等,您需要自己完成。 SAML 允许您做的就是将这些用户的身份验证转移到另一方。但是,您必须编写所有代码才能进行身份验证。
用户池本身可以使用 SAML 身份验证提供程序,或执行自己的内置身份验证。但在任何一种情况下,您最终都会得到一个存在于 Cognito 中的用户实体并具有与之关联的数据。
身份池提供授权,即决定允许(通常经过身份验证,但并非总是)用户做什么。他们确实在后台使用 STS 来获取启用特定操作的 token ,但身份池会根据用户特征选择是否授予凭据以及授予哪些凭据。身份池依赖于身份验证提供者来确定用户是谁;此提供程序也可以是用户池或 SAML 提供程序。身份池将根据提供者自动检查给定的身份验证 token 是否有效,以及它们是否允许用户获得某些授权 token 。
总结 、Cognito 用户池和 Cognito 身份池封装了您通常需要自己编写的功能,以便从 SAML 提供程序到用户数据库到用户到权限的映射,以便能够检索这些权限的 AWS 凭证。无需向 SAML 提供商(或实现您自己的身份验证)进行身份验证调用、实现用户数据库,然后为用户的权限生成 AWS 凭证,它们允许您配置用户池以使用给定的提供商(或 Cognito 自己的身份验证) ),将身份池指向用户池,并告诉身份池用户池成员应具有哪些权限。其余所有工作都在后台为您完成。

关于amazon-web-services - AWS : Amazon Cognito vs STS and SAML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53627639/

相关文章:

amazon-cognito - Amazon Cognito 托管的 UI 不可能用于 iframe?

amazon-web-services - AWS sts 在一个命令中扮演角色

c++ - STS 获取调用者身份 C++

linux - 为什么 AWS 防火墙不允许从我的工作计算机进行远程连接?

amazon-web-services - 无法通过 terraform 配置 aws_spot_instance

swift - aws cognito swift header 错误

android - 如何在 Android 上通过 retrofit2 使用 Cognito 凭证调用 API 网关?

aws-sts - AWS - STS 如何将 AWSSecurityTokenServiceClientBuilder 与全局区域结合使用

amazon-web-services - 交换环境URL到底如何工作?

amazon-web-services - 错误emrfs创建元数据不适用于EMR