【问题标题】:What is the difference in AWS for authenticating a mobile user with STS or CognitoAWS 使用 STS 或 Cognito 对移动用户进行身份验证有什么区别
【发布时间】:2020-04-12 14:29:32
【问题描述】:
我想知道 STS 在身份验证联合用户方面是否本质上类似于 Cognito?
每个 AWS 文档:AWS Security Token Service (STS)
AWS Security Token Service (STS) 是一项 Web 服务,可让您为 AWS Identity and Access Management (IAM) 用户或您认证的用户(联合用户)请求临时的、有限权限的凭证>)。
每个 AWS 文档:Cognito
Amazon Cognito 可让您快速轻松地将用户注册、登录和访问控制添加到您的 Web 和移动应用程序。 Amazon Cognito 可扩展到数百万用户,并支持通过 SAML 2.0 使用社交身份提供商(例如 Facebook、Google 和 Amazon)以及企业身份提供商进行登录。
STS 和 Cognito 在为移动应用程序验证移动用户方面有什么区别和用例?
【问题讨论】:
标签:
amazon-cognito
aws-sts
【解决方案1】:
首先,了解 Cognito 包含两个相关服务,User Pools and Identity Pools。
简而言之,用户池是一个包含所有功能的用户数据库:身份验证、MFA、组、密码重置等。它允许用户提供用户名和密码,如果它们有效,它会给他们一个令牌以证明他们是真实用户。它提供身份验证。
从用户到 AWS 凭证的 ID 池映射。为了映射到 AWS 凭证,它需要一些用户概念,而这必须由 somebody 提供。这可以是用户池,也可以是第 3 方。无论如何,只有拥有某种用户令牌后,您才能使用 id 池,然后您可以使用它来询问 id 池:“给我该用户可能使用的凭据(如果有)”。 id 池提供您对 AWS 服务进行授权所需的凭证。
STS 和 Cognito 在为移动应用程序验证移动用户方面有什么区别和用例?
考虑路径user login -A-> user auth token -B-> aws credentials。
STS 仅提供临时凭证。 STS 没有用户的概念,它只知道调用者是否有权限访问凭证,以及是哪些凭证。 “对于您进行身份验证的用户” 表示只有您处理所有身份验证,然后调用 STS 获取凭据以提供给这些用户。它既不满足箭头A 也不满足箭头B。
Cognito 用户池符合上述箭头 A。
Cognito id 池符合上述箭头 B。
如果您想自己执行箭头A 和箭头B,您可以使用STS 作为您的解决方案的一部分。
如果您只想自己做箭头A,您可以使用id 池来处理箭头B(id 池实际上在后端使用STS)。您将告诉 id pools 将处理箭头 A(例如 Facebook)的身份提供商,然后 您 将处理让 Facebook 为您验证用户身份的逻辑。您将获取用户获取的 Facebook 身份验证令牌,并将其传递给 id 池以取回凭据。
如果您想做最少的工作,您将使用用户池来处理箭头A,并使用id 池来处理箭头B。您仍然可以在用户池下方使用第三方身份验证提供程序(例如 Facebook),但您会将 id 池指向用户池,将用户池指向第三方。然后,用户池为您处理 A 部分的所有逻辑(您编写零 Facebook auth API 代码)。