

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

# 有关用户池身份验证的需知信息
<a name="authentication-flow-things-to-know"></a>

在使用 Amazon Cognito 用户池设计身份验证模型时，请考虑以下信息。

**托管登录与托管 UI 中的身份验证流程**  
[托管登录](cognito-user-pools-managed-login.md)提供的身份验证选项比经典托管 UI 更多。例如，无密码身份验证和通行密钥身份验证仅在托管登录中可用。

**自定义身份验证流程仅在 Amazon SDK 身份验证中可用**  
您无法在托管登录或经典托管 UI 中执行*自定义身份验证流程*，也无法[使用 Lambda 触发器进行自定义身份验证](user-pool-lambda-challenge.md)。自定义身份验证仅支持[使用 Amazon SDK 进行身份验证](authentication-flows-selection-sdk.md)时使用。

**通过外部身份提供者（IdP）登录的托管登录**  
在使用 [Amazon SDK 进行身份验证](authentication-flows-selection-sdk.md)时，您无法通过[第三方 IdPs](cognito-user-pools-identity-federation.md)登录用户。您必须实现托管登录或经典托管用户界面，重定向到 IdPs，然后在应用程序中使用 OIDC 库处理生成的身份验证对象。有关托管登录的更多信息，请参阅[用户池托管登录](cognito-user-pools-managed-login.md)。

**无密码身份验证对其他用户功能的影响**  
在用户池和应用程序客户端中激活使用[一次性密码](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passwordless)或[通行密钥](amazon-cognito-user-pools-authentication-flow-methods.md#amazon-cognito-user-pools-authentication-flow-methods-passkey)的无密码登录，会影响用户的创建和迁移。当无密码登录启用时：  

1. 管理员无需密码即可创建用户。默认的邀请消息模板将不再包含 `{###}` 密码占位符。有关更多信息，请参阅 [以管理员身份创建用户账户](how-to-create-user-accounts.md)。

1. 对于 SDK-based [SignUp](https://docs.amazonaws.cn/cognito-user-identity-pools/latest/APIReference/API_SignUp.html)操作，用户在注册时无需提供密码。而在托管登录和托管 UI 中，即使允许无密码身份验证，在注册页面中仍会要求用户输入密码。有关更多信息，请参阅 [注册并确认用户账户](signing-up-users-in-your-app.md)。

1. 如果从 CSV 文件导入的用户属性中包含可用无密码登录选项的电子邮件地址或电话号码，则无需重置密码，即可立即使用无密码选项登录。有关更多信息，请参阅 [通过 CSV 文件将用户导入用户池中](cognito-user-pools-using-import-tool.md)。

1. 无密码身份验证不会调用[用户迁移 Lambda 触发器](user-pool-lambda-migrate-user.md)。

1. 使用一次性密码 (OTP) 第一因素登录的用户无法在会话中添加[多重身份验证 (MFA)](user-pool-settings-mfa.md) 因素。如果配置了带有用户验证功能的密钥，则可以满足 MFA 要求。`MULTI_FACTOR_WITH_USER_VERIFICATION`

**通行密钥的依赖方 URL 不能位于公共后缀列表中**  
您可以使用自己拥有的域名（例如 `www.example.com`）作为通行密钥配置中的依赖方（RP）ID。此配置旨在支持运行在您自有域上的定制应用程序。[公共后缀列表](https://publicsuffix.org/)（PSL）包含受保护的高层级域。当您尝试将 RP URL 设置为 PSL 中的域时，Amazon Cognito 会返回错误。

## 身份验证会话流程持续时间
<a name="authentication-flow-session-duration"></a>

根据用户池的功能，您可以在应用程序从 Amazon Cognit `InitiateAuth` o 检索令牌`RespondToAuthChallenge`之前或之前应对多个挑战。Amazon Cognito 在对每个请求的响应中都包含一个会话字符串。要将您的 API 请求合并到身份验证流程中，请在每个后续请求中包含来自上一个请求的响应中的会话字符串。默认情况下，在会话字符串过期之前，您的用户有三分钟时间完成每项质询。要调整此时段，请更改您的应用程序客户端的 **Authentication flow session duration**（身份验证流程会话持续时间）。以下过程介绍如何在应用程序客户端配置中更改此设置。

**注意**  
**身份验证流程会话持续时间**设置适用于使用 Amazon Cognito 用户池 API 进行身份验证。在最终用户首次使用临时密码登录期间，托管登录将多因素身份验证的会话持续时间设置为 3 分钟，强制更改密码的会话持续时间设置为 8 分钟。

------
#### [ Amazon Cognito console ]

**配置应用程序客户端身份验证流程会话持续时间 (Amazon Web Services 管理控制台)**

1. 在您的用户池中的**应用程序集成**选项卡上，从**应用程序客户端和分析**容器中选择您的应用程序客户端的名称。

1. 在**应用程序客户端信息**容器中选择**编辑**。

1. 将**身份验证流程会话持续时间**的值更改为短信和电子邮件 MFA 验证码所需的有效期，以分钟为单位。这还会更改任何用户在您的应用程序客户端中必须完成任何身份验证质询的时间。

1. 选择**保存更改**。

------
#### [ User pools API ]

**配置应用程序客户端身份验证流程会话持续时间 (Amazon Cognito API)**

1. 使用 `DescribeUserPoolClient` 请求中您的现有用户池设置准备 `UpdateUserPoolClient` 请求。您的 `UpdateUserPoolClient` 请求必须包含所有现有的应用程序客户端属性。

1. 将 `AuthSessionValidity` 的值更改为 SMS MFA 代码所需的有效期，以分钟为单位。这还会更改任何用户在您的应用程序客户端中必须完成任何身份验证质询的时间。

------

有关应用程序客户端的更多信息，请参阅[Application-specific 使用应用程序客户端进行设置](user-pool-settings-client-apps.md)。

## 失败登录尝试的锁定行为
<a name="authentication-flow-lockout-behavior"></a>

在使用用户密码进行五次登录尝试失败后，无论这些尝试是通过未经身份验证还是 IAM-authorized API 操作进行的，Amazon Cognito 都会将您的用户锁定一秒钟。然后，每多一次失败的尝试，锁定持续时间将增加一倍，最长约为 15 分钟。

在锁定期内进行的尝试会产生 `Password attempts exceeded` 异常，不会影响后续锁定期的持续时间。对于累计 *n* 次的失败登录尝试（不包括 `Password attempts exceeded` 异常），Amazon Cognito 会将您的用户锁定 *2^(n-5)* 秒。要将锁定重置为其 *n=0* 初始状态，用户必须在锁定期到期后才能成功登录，或者在锁定后连续 15 分钟的任何时间内都不得发起任何登录尝试。此行为随时可能会发生变化。此行为不适用于自定义质询，除非它们还执行基于密码的身份验证。