Amazon Cognito
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

使用自适应身份验证

借助自适应身份验证,可以将用户池配置为阻止可疑登录,或响应增加的风险级别需要第二安全要素身份验证。对于每次登录尝试,Amazon Cognito 都会生成一个风险分数来表示登录请求来自遭盗用源的可能性。此风险分数基于许多因素,包括它是否检测到新设备、用户位置或 IP 地址。

Amazon Cognito 将向 Amazon CloudWatch 发布登录尝试、其风险级别和失败的质询。有关更多信息,请参阅查看高级安全指标

要向用户池添加自适应身份验证,请参阅向用户池添加高级安全

自适应身份验证概述

在 Amazon Cognito 控制台中的高级安全页面上,可以选择自适应身份验证的设置,包括在不同风险级别下采取什么操作,以及向用户发送的通知消息的自定义设置。

对于每个风险级别,您可以选择以下选项:

选项

操作

允许 允许登录尝试而无需额外因素。
可选 MFA 已配置 MFA 的用户需要完成第二安全要素质询才能登录。允许未配置 MFA 的用户登录,不需要额外的安全要素。
需要 MFA 已配置 MFA 的用户需要完成第二安全要素质询才能登录。阻止未配置 MFA 的用户登录。
Block 阻止该风险级别下的所有登录尝试。

创建设备指纹

从服务器调用 Amazon Cognito 身份验证 API(如 AdminInitiateAuthAdminRespondToAuthChallenge)时,需要在 ContextData 参数中传递用户的源 IP。除此之外,还有通过使用 Amazon Cognito 上下文数据收集库收集的服务器名称、服务器路径和编码的设备指纹数据。

有关从 Web 或移动应用程序启用高级安全的信息,请参阅通过应用程序启用用户池高级安全

当应用程序从服务器调用 Amazon Cognito 时,从客户端收集用户上下文数据。以下是使用 JavaScript 开发工具包方法 getData 的示例。

var encodedData = AmazonCognitoAdvancedSecurityData.getData(username, userPoolId, clientId);

注意

建议在应用程序中包含最新的 Amazon Cognito 开发工具包。这使自适应身份验证能够收集设备指纹信息 — 如设备 ID、模型和时区。有关 Amazon Cognito 开发工具包的更多信息,请参阅安装用户池开发工具包

查看用户事件历史记录

可以在 Amazon Cognito 控制台的用户和组中选择一个用户来查看该用户的登录历史记录。Amazon Cognito 会将用户事件历史记录保留两年。


            用户事件历史记录

每个登录事件都有一个事件 ID、上下文数据 (例如位置)、设备详细信息以及与其关联的风险检测结果。


            用户登录事件

您也可以将事件 ID 与颁发的令牌关联。颁发的令牌(如 ID 令牌和访问令牌)将在其负载中包含此事件 ID。使用刷新令牌的事件将保留原始事件 ID。原始事件 ID 可追溯到导致颁发 Amazon Cognito 令牌的登录事件的事件 ID。这使您能够跟踪系统中的令牌在特定身份验证事件中的使用。

提供事件反馈

事件反馈实时影响风险评估,并随着时间的推移改进风险评估算法。可以通过 Amazon Cognito 控制台和 API 提供有关登录尝试有效性的反馈。

在控制台中的用户和组选项卡上,将列出登录历史记录,如果您单击某个条目,则可以将事件标记为有效或无效。还可以通过用户池 API 方法 AdminUpdateAuthEventFeedback、AWS CLI 命令 admin-update-auth-event-feedback 提供反馈。

发送通知消息

有了高级安全保护,Amazon Cognito 可以通知用户发现了登录尝试,提示它们单击链接以指示登录有效还是无效,并使用用户的反馈来提升用户池的风险检测准确性。

当登录尝试被评为低、中和高风险时,您希望如何使用自适应身份验证?部分中,选择将低、中和高风险案例通知用户


            通知用户

可以自定义通知电子邮件并同时提供明文和 HTML 版本。选择自适应身份验证通知消息中的自定义以自定义电子邮件通知。要了解有关电子邮件模板的更多信息,请参阅消息模板