AWS 使用 STS 或 Cognito 对移动用户进行身份验证有什么区别

What is the difference in AWS for authenticating a mobile user with STS or Cognito

我想知道在对联合用户进行身份验证方面,STS 是否与 Cognito 本质上类似?

根据 AWS 文档:AWS Security Token Service (STS)

AWS Security Token Service (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 (federated users).

根据 AWS 文档:Cognito

Amazon Cognito lets you add user sign-up, sign-in, and access control to your web and mobile apps quickly and easily. Amazon Cognito scales to millions of users and supports sign-in with social identity providers, such as Facebook, Google, and Amazon, and enterprise identity providers via SAML 2.0.

STS 和 Cognito 在对移动应用程序的移动用户进行身份验证方面有何区别和用例

首先,了解 Cognito 包含两项相关服务,User Pools and Identity Pools

简而言之,用户池是一个包含所有细节的用户数据库:身份验证、MFA、组、密码重置等。它允许用户提供用户名和密码,如果它们有效,它会提供他们是证明他们是真实用户的令牌。它提供身份验证

ID 池映射 从用户到 AWS 凭证。为了映射到 AWS 凭证,它需要一些用户的概念,这必须由 somebody 提供。这可以是用户池或第三方。无论如何,一旦您拥有某种用户令牌,您就只能使用 ID 池,然后您可以使用它来询问 ID 池:"give me the credentials (if any) this user may use"。 ID 池提供您需要的凭据,以针对 AWS 服务授权


What is the difference and use case for STS and Cognito in terms of authenticating a mobile user for a mobile app?

考虑路径 user login -A-> user auth token -B-> aws credentials

  1. STS 提供临时凭证。 STS 没有用户的概念,它只知道调用者是否有访问凭据的权限,以及这些凭据是什么。 "For users that you authenticate" 表示 只有您 处理所有身份验证,然后调用 STS 获取凭据以提供给这些用户。它既不满足箭头 A 也不满足箭头 B.

  2. Cognito 用户池满足上面的箭头 A

  3. Cognito ID 池实现上面的箭头 B

如果您想自己完成箭头 A 和箭头 B,您可以使用 STS 作为解决方案的一部分。

如果你只想自己做箭头A,你可以使用id池来处理箭头B(id池实际上在后端使用STS)。您会告诉 id 池将处理箭头 A(例如 Facebook)的身份提供者,然后 you 将处理让 Facebook 为您验证用户身份的逻辑。您将获取用户获得的 Facebook 身份验证令牌,并将其传递到 ID 池以取回凭据。

如果您想做最少的工作,您可以使用用户池来处理箭头 A 并使用 ID 池来处理箭头 B。您仍然可以在用户池下使用第三方身份验证提供程序(例如 Facebook),但您会将 ID 池指向用户池,将用户池指向第三方。然后,用户池为您处理 A 部分的所有逻辑(您编写零 Facebook 身份验证 API 代码)。