

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

# Amazon Cognito 用户群体
<a name="cognito-user-pools"></a>

Amazon Cognito 用户池是用于 Web 和移动应用程序身份验证和授权的用户目录。从应用程序的角度来看，Amazon Cognito 用户池是 OpenID Connect（OIDC）身份提供者（IdP）。用户池为安全性、身份联合验证、应用程序集成和用户体验自定义添加了多层附加功能。

例如，您可以验证用户的会话是否来自可信来源。您可以将 Amazon Cognito 目录与外部身份提供者相结合。使用您的首选 AWS SDK，您可以选择最适合您的应用程序的 API 授权模式。您还可以添加用于修改或彻底修改 Amazon Cognito 原定设置行为的 AWS Lambda 函数。

![大致地概述用户池工作原理的示意图。客户可以通过使用 AWS SDK 构建的应用程序进行登录，也可以使用用户池中内置的 OIDC IdP 进行登录。用户池还可以统一多个社交身份提供者、OpenID Connect 和 SAML 2.0 身份提供者的登录流程。](http://docs.aws.amazon.com/zh_cn/cognito/latest/developerguide/images/scenario-authentication-cup.png)


**Topics**
+ [功能](#cognito-user-pools-features)
+ [用户池功能计划](cognito-sign-in-feature-plans.md)
+ [Amazon Cognito 用户池安全最佳实践](user-pool-security-best-practices.md)
+ [使用 Amazon Cognito 用户池进行身份验证](authentication.md)
+ [使用第三方身份提供者进行用户池登录](cognito-user-pools-identity-federation.md)
+ [用户池托管登录](cognito-user-pools-managed-login.md)
+ [使用 Lambda 触发器自定义用户池工作流](cognito-user-pools-working-with-lambda-triggers.md)
+ [管理用户池中的用户](managing-users.md)
+ [了解用户池 JSON 网络令牌 (JWTs)](amazon-cognito-user-pools-using-tokens-with-identity-providers.md)
+ [在成功登录后访问资源](accessing-resources.md)
+ [作用域、M2M 和资源服务器](cognito-user-pools-define-resource-servers.md)
+ [配置用户池功能](user-pools-configure-features.md)
+ [使用 Amazon Cognito 用户池安全功能](managing-security.md)
+ [用户池端点和托管登录参考](cognito-userpools-server-contract-reference.md)

## 功能
<a name="cognito-user-pools-features"></a>

Amazon Cognito 用户池具有以下功能。

### 注册
<a name="cognito-user-pools-sign-up"></a>

Amazon Cognito 用户池具有用户驱动、管理员驱动和编程方法，可将用户配置文件添加到您的用户池。Amazon Cognito 用户池支持以下注册模式。您可以在应用程序中使用这些模型的任意组合。

**重要**  
如果您在用户池中激活用户注册，则互联网上的任何人都可以注册账户并登录您的应用程序。除非您开放您的应用程序供公开注册，否则不要在用户池中启用自助注册。要更改此设置，请在用户池控制台的 “**身份验证**” 下的 “**注册**” 菜单中更新**自助服务**注册，或者更新[ CreateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_CreateUserPool.html)或 [ UpdateUserPool](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_UpdateUserPool.html)API [ AllowAdminCreateUserOnly](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminCreateUserConfigType.html#CognitoUserPools-Type-AdminCreateUserConfigType-AllowAdminCreateUserOnly)请求中的值。  
有关可以在用户池中设置的安全功能的信息，请参阅[使用 Amazon Cognito 用户池安全功能](managing-security.md)。

1. 用户可以在应用程序中输入其信息，并创建用户池原生的用户配置文件。您可以调用 API 注册操作在用户池中注册用户。您可以向任何人开放这些注册操作，也可以使用客户密钥或 AWS 凭据对其进行授权。

1. 您可以将用户重定向到第三方 IdP，他们可以授权该第三方 IdP 将其信息传递给 Amazon Cognito。Amazon Cognito 将 OIDC 身份令牌、 OAuth 2.0 `userInfo` 数据和 SAML 2.0 断言处理到您的用户池中的用户个人资料中。您可以根据属性映射规则控制您希望 Amazon Cognito 接收的属性。

1. 您可以跳过公共注册或联合身份验证注册，并根据自己的数据来源和模式来创建用户。在 Amazon Cognito 控制台或 API 中直接添加用户。从 CSV 文件导入用户。运行一个 just-in-time AWS Lambda 函数，在现有目录中查找您的新用户，并根据现有数据填充他们的用户配置文件。

用户注册后，您可以将他们添加到 Amazon Cognito 在访问令牌和 ID 令牌中列出的组。在将 ID 令牌传递给身份池时，还可以将用户池组链接到 IAM 角色。

**相关主题**
+ [管理用户池中的用户](managing-users.md)
+ [了解 API、OIDC 和托管登录页面身份验证](authentication-flows-public-server-side.md#user-pools-API-operations)
+ [使用 Amazon Cognito 身份提供商的代码示例 AWS SDKs](service_code_examples_cognito-identity-provider.md)

### 登录
<a name="cognito-user-pools-sign-in"></a>

Amazon Cognito 可以是应用程序的独立用户目录和身份提供者（IdP）。您的用户可以通过 Amazon Cognito 托管的托管登录页面进行登录，也可以通过采用 Amazon Cognito 用户池 API 构建的定制用户身份验证服务进行登录。定制前端背后的应用程序层可以使用多种方法中的任何一种来授权后端的请求，以确认有效的请求。

用户可以使用用户名和密码、通行密钥以及通过电子邮件或短信接收的一次性密码进行注册和登录。您可以提供以下功能：与外部用户目录整合登录、登录后的多重身份验证（MFA）、信任已记住的设备，以及您自行设计的自定义身份验证流程。

要使用外部目录（可选择与 Amazon Cognito 内置的用户目录结合使用）登录用户，您可以添加以下集成。

1. 使用 OAuth 2.0 社交登录登录并导入客户用户数据。亚马逊 Cognito 支持在 2.0 之前使用谷歌、Facebook、亚马逊和苹果登录。 OAuth 

1. 使用 SAML 和 OIDC 登录进行登录并导入工作和学校用户数据。您也可以将 Amazon Cognito 配置为接受来自任何 SAML 或 OpenID Connect（OIDC）身份提供者（IdP）的声明。

1.  将外部用户配置文件链接到原生用户配置文件。关联的用户可以使用第三方用户身份登录，并获得您分配给内置目录中的用户的访问权限。

**相关主题**
+ [使用第三方身份提供者进行用户池登录](cognito-user-pools-identity-federation.md)
+ [将联合用户与现有用户配置文件关联](cognito-user-pools-identity-federation-consolidate-users.md)

**Machine-to-machine 授权**  
有些会话不是 human-to-machine互动。您可能需要一个能够通过自动化流程向 API 授权请求的服务账户。要生成访问令牌以 machine-to-machine进行 OAuth 2.0 范围的授权，您可以添加生成[客户端凭据](https://www.rfc-editor.org/rfc/rfc6749#section-4.4)授权的应用程序客户端。

**相关主题**
+ [作用域、M2M 和资源服务器](cognito-user-pools-define-resource-servers.md)

### 托管登录
<a name="cognito-user-pools-hosted-ui"></a>

如果您不想构建用户界面，则可以向用户提供自定义的托管登录页面。托管登录是一组用于注册、登录、多重身份验证（MFA）和密码重置的网页。您可以将托管登录添加到现有域中，也可以在 AWS 子域中使用前缀标识符。

**相关主题**
+ [用户池托管登录](cognito-user-pools-managed-login.md)
+ [配置用户池域](cognito-user-pools-assign-domain.md)

### 安全性
<a name="cognito-user-pools-security"></a>

您的本地用户可以通过短信或电子邮件消息中的代码，或用于生成多重身份验证（MFA）代码的应用程序，提供额外的身份验证因素。您可以构建在应用程序中设置和处理 MFA 的机制，也可以让托管登录来管理 MFA。当您的用户从可信设备登录时，Amazon Cognito 用户池可以绕过 MFA。

如果您不想最初就要求用户提供 MFA，则可以有条件地提出要求。借助自适应身份验证，Amazon Cognito 可以检测潜在的恶意活动，并要求用户设置 MFA 或阻止登录。

如果进入用户池的网络流量可能是恶意的，则可以对其进行监控并使用 AWS WAF 网络采取措施 ACLs。

**相关主题**
+ [向用户池添加 MFA](user-pool-settings-mfa.md)
+ [具备威胁防护的高级安全功能](cognito-user-pool-settings-threat-protection.md)
+ [将 AWS WAF Web ACL 与用户池关联](user-pool-waf.md)

### 自定义客户体验
<a name="cognito-user-pools-custom-user-experience"></a>

在用户注册、登录或配置文件更新的大多数阶段，您可以自定义 Amazon Cognito 处理请求的方式。使用 Lambda 触发器，您可以根据自定义条件修改 ID 令牌或拒绝注册请求。您可以创建自己的自定义身份验证流程。

您可以上传自定义 CSS 和徽标，为用户提供熟悉的托管登录外观。

**相关主题**
+ [使用 Lambda 触发器自定义用户池工作流](cognito-user-pools-working-with-lambda-triggers.md)
+ [自定义身份验证质询 Lambda 触发器](user-pool-lambda-challenge.md)
+ [将品牌应用于托管登录页面](managed-login-branding.md)

### 监控和分析
<a name="cognito-user-pools-monitoring-and-analytics"></a>

Amazon Cognito 用户池将 API 请求（包括对托管登录的请求）记录到 AWS CloudTrail。您可以在 Service Quotas 控制台中查看亚马逊 CloudWatch 日志中的性能指标， CloudWatch 使用 Lambda 触发器将自定义日志推送到，监控电子邮件和短信的传送情况，以及监控 API 请求量。

借助增值版[功能计划](cognito-sign-in-feature-plans.md)，您可以利用自动学习技术监控用户身份验证尝试中的泄露迹象，并立即对风险进行补救。这些高级安全功能还可以将用户活动记录到您的用户池中，也可以记录到 Amazon S3、 CloudWatch 日志或 Amazon Data Firehose 中。

还可以将 API 请求中的设备和会话数据记录到 Amazon Pinpoint 活动中。借助 Amazon Pinpoint，您可以根据对用户活动的分析，从应用程序发送推送通知。

**相关主题**
+ [亚马逊 Cognito 正在登录 AWS CloudTrail](logging-using-cloudtrail.md)
+ [跟踪和 Service Quotas 中的配额 CloudWatch 和使用情况](tracking-quotas-and-usage-in-cloud-watch-and-service-quotas.md)
+ [从 Amazon Cognito 用户池导出日志](exporting-quotas-and-usage.md)
+ [使用 Amazon Pinpoint 进行用户池分析](cognito-user-pools-pinpoint-integration.md)

### Amazon Cognito 身份池集成
<a name="cognito-user-pools-identity-pools-integration"></a>

Amazon Cognito 的另一半是身份池。身份池提供证书，用于授权和监控您的用户向（例如 Amazon DynamoDB 或 Amazon S3）发出的 API 请求。 AWS 服务您可以构建基于身份的访问策略，根据您在用户池中对用户进行分类的方式来保护您的数据。身份池还可以接受来自各种身份提供者的令牌和 SAML 2.0 断言，与用户池身份验证无关。

**相关主题**
+ [登录后 AWS 服务 使用身份池进行访问](amazon-cognito-integrating-user-pools-with-identity-pools.md)
+ [Amazon Cognito 身份池](cognito-identity.md)