

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon Cognito 常见场景
<a name="cognito-scenarios"></a>

本主题描述了使用 Amazon Cognito 的七种常见场景。

Amazon Cognito 的两个主要组件是用户池和身份池。用户池是为您的 Web 和移动应用程序用户提供注册和登录选项的用户目录。身份池提供临时 Amazon 证书，以授予您的用户访问其他人的权限 Amazon Web Services 服务。

用户池是 Amazon Cognito 中的用户目录。您的应用程序用户可以通过用户池直接登录，也可以通过第三方身份提供者（IdP）进行联合身份验证。用户池管理处理通过Facebook、谷歌、亚马逊和苹果进行社交登录以及从OpenID Connect（OIDC）和SAML返回的代币的开销。 IdPs无论您的用户是直接登录还是通过第三方登录，用户池的所有成员都有一个可通过开发工具包访问的目录配置文件。

借助身份池，您的用户可以获得访问 Amazon 服务（例如 Amazon S3 和 DynamoDB）的临时 Amazon 证书。身份池支持匿名访客用户，也支持通过第三方进行联合 IdPs。

**Topics**
+ [使用用户池进行身份验证](#scenario-basic-user-pool)
+ [使用用户池令牌访问后端资源](#scenario-backend)
+ [将 API Gateway 和 Lambda 与用户池结合使用来访问资源](#scenario-api-gateway)
+ [访问权限 Amazon 带有用户池和身份池的服务](#scenario-aws-and-user-pool)
+ [向第三方进行身份验证并访问 Amazon 带有身份池的服务](#scenario-identity-pool)
+ [访问权限 Amazon AppSync 使用 Amazon Cognito 的资源](#scenario-appsync)
+ [授权机器对机器 (M2M) 应用程序](#scenario-machine-to-machine)
+ [Step-up authentication](#scenario-step-up-authentication)

## 使用用户池进行身份验证
<a name="scenario-basic-user-pool"></a>

您可以允许您的用户使用用户池进行身份验证。您的应用程序用户可以通过用户池直接登录，也可以通过第三方身份提供者（IdP）进行联合身份验证。用户池管理处理通过Facebook、谷歌、亚马逊和苹果进行社交登录以及从OpenID Connect（OIDC）和SAML返回的代币的开销。 IdPs

成功进行身份验证后，您的网络或移动应用程序将收到来自 Amazon Cognito 的用户池令牌。您可以使用这些令牌来检索允许您的应用程序访问其他 Amazon 服务的 Amazon 证书，也可以选择使用它们来控制对服务器端资源或 Amazon API Gateway 的访问。

有关更多信息，请参阅[身份验证会话示例](authentication.md#amazon-cognito-user-pools-authentication-flow)和[了解用户池 JSON Web 令牌（JWT）](amazon-cognito-user-pools-using-tokens-with-identity-providers.md)。

![身份验证概述](https://docs.amazonaws.cn/cognito/latest/developerguide/images/scenario-authentication-cup.png)


## 使用用户池令牌访问后端资源
<a name="scenario-backend"></a>

成功登录用户池后，您的网络或移动应用程序将收到来自 Amazon Cognito 的用户池令牌。您可以使用这些令牌控制对您的服务器端资源的访问。您也可以创建用户池组来管理权限以及表示不同类型的用户。有关使用组控制资源访问权限的更多信息，请参阅[向用户池添加组](cognito-user-pools-user-groups.md)。

![通过用户池访问您的服务器端资源](https://docs.amazonaws.cn/cognito/latest/developerguide/images/scenario-standalone.png)


在为用户群体配置域后，Amazon Cognito 会预调配一个托管 Web UI，您可使用此 UI 为应用程序添加注册页和登录页。使用此 OAuth 2.0 基础，您可以创建自己的资源服务器，从而使您的用户能够访问受保护的资源。有关更多信息，请参阅 [作用域、M2M 和资源服务器](cognito-user-pools-define-resource-servers.md)。

有关用户群体身份验证的更多信息，请参阅[身份验证会话示例](authentication.md#amazon-cognito-user-pools-authentication-flow)和[了解用户池 JSON Web 令牌（JWT）](amazon-cognito-user-pools-using-tokens-with-identity-providers.md)。

## 将 API Gateway 和 Lambda 与用户池结合使用来访问资源
<a name="scenario-api-gateway"></a>

您可以允许用户通过 API Gateway 访问您的 API。API Gateway 会验证来自成功用户池身份验证的令牌，并使用它们向您的用户授予对资源（包括 Lambda 函数）或您自己的 API 的访问权限。

您可以使用用户池中的组控制对 API Gateway 的权限，方法是将组成员资格映射到 IAM 角色。用户所属的组包含在您的应用程序用户登录时用户池提供的 ID 令牌中。有关用户池组的更多信息，请参阅[向用户池添加组](cognito-user-pools-user-groups.md)。

您可以将您的用户池令牌随请求一起提交到 API Gateway，以便 Amazon Cognito 授权方 Lambda 函数进行验证。有关 API Gateway 的更多信息，请参阅[将 API Gateway 与 Amazon Cognito 用户池结合使用](https://docs.amazonaws.cn/apigateway/latest/developerguide/apigateway-integrate-with-cognito.html)。

![通过用户池访问 API Gateway](https://docs.amazonaws.cn/cognito/latest/developerguide/images/scenario-api-gateway.png)


## 访问权限 Amazon 带有用户池和身份池的服务
<a name="scenario-aws-and-user-pool"></a>

成功进行用户池身份验证后，您的应用程序将收到来自 Amazon Cognito 的用户池令牌。您可以将它们交换为通过身份池临时访问其他 Amazon 服务。有关更多信息，请参阅[访问 Amazon Web Services 服务 登录后使用身份池](amazon-cognito-integrating-user-pools-with-identity-pools.md)和[Amazon Cognito 身份池入门](getting-started-with-identity-pools.md)。

![通过带有身份池的用户池访问 Amazon 证书](https://docs.amazonaws.cn/cognito/latest/developerguide/images/scenario-cup-cib.png)


## 向第三方进行身份验证并访问 Amazon 带有身份池的服务
<a name="scenario-identity-pool"></a>

您可以允许您的用户通过身份池访问 Amazon 服务。身份池需要来自由第三方身份提供商进行身份验证的用户的 IdP 令牌 (如果是匿名来访者，则不需要令牌)。作为交换，身份池会授予可用于访问其他 Amazon 服务的临时 Amazon 证书。有关更多信息，请参阅 [Amazon Cognito 身份池入门](getting-started-with-identity-pools.md)。

![通过带有身份池的第三方身份提供商访问 Amazon 证书](https://docs.amazonaws.cn/cognito/latest/developerguide/images/scenario-identity-pool.png)


## 访问权限 Amazon AppSync 使用 Amazon Cognito 的资源
<a name="scenario-appsync"></a>

您可以通过成功的 Amazon Cognito 用户池身份验证获得的令牌向您的用户授予访问 Amazon AppSync 资源的权限。有关更多信息，请参阅《Amazon AppSync 开发人员指南》**中的 [AMAZON\_COGNITO\_USER\_POOLS 授权](https://docs.amazonaws.cn/appsync/latest/devguide/security-authz.html#amazon-cognito-user-pools-authorization)。

您还可以使用从身份池收到的 IAM 证书签署对 Amazon AppSync GraphQL API 的请求。请参阅 [AWS\_IAM 授权](https://docs.amazonaws.cn/appsync/latest/devguide/security-authz.html#aws-iam-authorization)。

![通过用户池或身份池访问 Amazon AppSync 资源](https://docs.amazonaws.cn/cognito/latest/developerguide/images/scenario-appsync.png)


## 授权机器对机器 (M2M) 应用程序
<a name="scenario-machine-to-machine"></a>

借助机器对机器 (M2M) 授权，应用程序、服务或设备可以以自身身份进行身份验证，并获得对您的 API 的授权访问权限，无需登录用户。Amazon Cognito 授权应用程序而不是用户，并且仅发放访问令牌——没有 ID 令牌，也没有刷新令牌。这是工作负载的模型，例如自动从物联网 (IoT) 设备群收集数据的应用程序，其中每台设备都连接到您的 API，并在没有人参与的情况下推送数据。

要启用 M2M 授权，请构建一个具有客户端密钥的应用程序客户端，然后将其启用以进行`client_credentials`授权。您的机器身份从授权服务器请求令牌并将其提供给您的资源服务器。有关更多信息，请参阅[Machine-to-machine (M2M) 授权](cognito-user-pools-define-resource-servers.md#cognito-user-pools-define-resource-servers-about-m2m)和[令牌端点](token-endpoint.md)。

## Step-up authentication
<a name="scenario-step-up-authentication"></a>

考虑一个允许用户使用用户名和密码登录的银行应用程序。要进行电汇，应用程序需要多因素身份验证 (MFA)。当用户尝试转移时，应用程序会检查用户访问令牌和 ID 令牌中的`acr`声明，确定身份验证级别不足，并将用户重定向到 Amazon Cognito 以完成 MFA。然后，Amazon Cognito 会发布一个具有更高身份验证级别的新令牌，应用程序允许转移。

在将用户重定向到 Amazon Cognito 进行升级身份验证之前，请评估您的应用程序已持有的令牌。将`auth_time`索赔与操作允许的最大年龄进行比较，并将代币的`acr`等级与操作所需的级别进行比较。只有在尚未达到所需的身份验证级别或新鲜度时，才会将用户重定向到 Amazon Cognito 以完成身份验证流程。

有关 ACR 级别、AMR 值和其他升级身份验证概念的更多信息，请参阅。[ACR 和 AMR 声明的身份验证级别](cognito-user-pools-step-up-authentication.md)有关请求增强身份验证的机制，[Step-up 使用 USER\_AUTH 流程进行身份验证](authentication-flows-selection-sdk.md#cognito-user-pools-step-up-user-auth)请参见`USER_AUTH`流程[对端点授权](authorization-endpoint.md)和[登录端点](login-endpoint.md)托管登录。