使用自适应身份验证 - Amazon Cognito

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

使用自适应身份验证

借助自适应身份验证,可以将用户池配置为阻止可疑登录,或为响应增加的风险级别添加第二安全要素身份验证。对于每次登录尝试,Amazon Cognito 都会生成一个风险分数来表示登录请求来自遭盗用源的可能性。该风险评分基于包括设备和用户信息在内的因素。当 Amazon Cognito 检测到用户会话中存在风险且用户尚未选择多重身份验证(MFA)方法时,自适应身份验证可以为用户池中的用户开启或要求 MFA。当您为用户激活 MFA 时,无论您如何配置自适应身份验证,他们都会收到在身份验证期间提供或设置第二因素的质询。从用户的角度来看,您的应用程序可以帮助他们设置 MFA,也可以选择让 Amazon Cognito 阻止他们再次登录,直到他们配置了附加因素。

Amazon Cognito 向亚马逊发布了登录尝试、其风险等级和失败的挑战。 CloudWatch有关更多信息,请参阅查看高级安全指标

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

自适应身份验证概览

在 Amazon Cognito 控制台的应用程序集成选项卡中的高级安全上,您可以选择自适应身份验证的设置,包括在不同风险等级下采取什么操作,以及向用户发送的通知消息的自定义设置。您可以为所有应用程序客户端分配全局高级安全配置,但将客户端级配置应用于各个应用程序客户端。

Amazon Cognito 自适应身份验证为每个用户会话分配以下风险级别之一:无风险

强制执行方法仅限审计更改为完整功能时,请仔细斟酌您的选项。您对风险等级应用的自动响应会影响 Amazon Cognito 为具有相同特征的后续用户会话分配的风险等级。例如,在您选择不采取任何操作或允许之后,对于 Amazon Cognito 最初评估为高风险的用户会话,Amazon Cognito 会认为类似会话的风险较低。

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

选项

操作

允许 用户无需额外安全要素即可登录。
可选 MFA 已配置第二安全要素的用户需要完成第二安全要素质询才能登录。用于 SMS 的电话号码和 TOTP 软件令牌是可供使用的第二个安全要素。未配置第二个因素的用户只能使用一组凭证登录。
需要 MFA 已配置第二安全要素的用户需要完成第二安全要素质询才能登录。Amazon Cognito 阻止未配置第二个安全要素的用户登录。
阻止 Amazon Cognito 阻止指定风险级别下的所有登录尝试。
注意

您无需验证手机号码即可将其用于 SMS 来作为第二个身份验证要素。

将用户设备和会话数据添加到 API 请求

当您使用 API 对用户进行注册、登录和重置密码时,可以收集用户会话的相关信息并将其传递给 Amazon Cognito 高级安全功能。此信息包括用户的 IP 地址和唯一的设备标识符。

您可能在用户和 Amazon Cognito 之间有中间网络设备,例如代理服务或应用程序服务器。您可以收集用户的上下文数据并将其传递给 Amazon Cognito,以便自适应身份验证根据用户端点(而不是服务器或代理)的特征来计算风险。如果您的客户端应用程序直接调用 Amazon Cognito API 操作,自适应身份验证会自动记录源 IP 地址。但是,它不会记录其他设备信息(例如 user-agent),除非您也收集设备指纹。

使用 Amazon Cognito 上下文数据收集库生成这些数据,然后使用和参数将其提交给 Amazon Cognito 高级安全部门。ContextDataUserContextData上下文数据收集库包含在 AWS SDK 中。有关更多信息,请参阅将 Amazon Cognito 与 Web 和移动应用程序集成。如果您已在用户池中激活了高级安全功能,则可以提交 ContextData。有关更多信息,请参阅配置高级安全功能

当您从应用程序服务器调用以下经过 Amazon Cognito 身份验证的 API 操作时,请在 ContextData 参数中传递用户设备的 IP。此外,请传递服务器名称、服务器路径和编码的设备指纹数据。

当您调用 Amazon Cognito 未经身份验证的 API 操作时,您可以将 UserContextData 提交到 Amazon Cognito 高级安全功能。此数据在 EncodedData 参数中包括设备指纹。如果您符合以下条件,也可以在 UserContextData 中提交 IpAddress 参数:

您的应用程序可以在以下 Amazon Cognito 未经验证的 API 操作中,使用编码的设备指纹数据和用户设备的 IP 地址填充 UserContextData 参数。

接受额外的用户上下文数据(AWS Management Console)

激活接受其他用户上下文数据功能后,用户池在 UserContextData 参数中接受 IP 地址。在以下情况下,您无需激活此功能:

  • 您的用户只能使用经过身份验证的 API 操作(例如)登录 AdminInitiateAuth ,并且您使用ContextData参数。

  • 您只希望未经身份验证的 API 操作向 Amazon Cognito 高级安全功能发送设备指纹,而不是 IP 地址。

在 Amazon Cognito 控制台中按如下方式更新应用程序客户端,以添加对其他用户上下文数据的支持。

  1. 登录 Amazon Cognito 控制台

  2. 在导航窗格中,选择 管理您的用户池,然后选择要编辑的用户池。

  3. 选择应用程序集成选项卡。

  4. 应用程序客户端和分析下,选择或创建应用程序客户端。有关更多信息,请参阅配置用户池应用程序客户端

  5. 应用程序客户端信息容器中选择编辑

  6. 在应用程序客户端的高级身份验证设置下,选择接受其他用户上下文数据

  7. 选择保存更改

要将您的应用程序客户端配置为接受 Amazon Cognito API 中的用户情境数据,请在CreateUserPoolClientEnablePropagateAdditionalUserContextDataUpdateUserPoolClient请求true中设置为。有关从 Web 或移动应用程序激活高级安全功能的信息,请参阅从应用程序中激活用户池高级安全功能。当您的应用程序从服务器调用 Amazon Cognito 时,从客户端收集用户上下文数据。以下是使用 JavaScript SDK 方法的示例getData

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

在设计应用程序以使用自适应身份验证时,我们建议您将最新的 Amazon Cognito 开发工具包集成到应用程序中。最新版本的开发工具包收集设备指纹信息,如设备 ID、模型和时区。有关 Amazon Cognito SDK 的更多信息,请参阅安装用户池 SDK。Amazon Cognito 高级安全功能只为应用程序以正确格式提交的事件保存和分配风险评分。如果 Amazon Cognito 返回错误响应,请检查您的请求是否包含有效的密钥哈希值,以及 IPaddress 参数是否为有效的 IPv4 或 IPv6 地址。

ContextDataUserContextData 资源

查看用户事件历史记录

注意

在新的 Amazon Cognito 控制台中,您可以在用户选项卡中查看用户事件历史记录。

要查看某个用户的登录历史记录,您可以在 Amazon Cognito 控制台的用户选项卡中选择该用户。Amazon Cognito 会将用户事件历史记录保留两年。


            用户事件历史记录

每个登录事件都有一个事件 ID。该事件还包含对应的上下文数据,如位置、设备详细信息和风险检测结果。您可以使用 Amazon Cognito API 操作AdminListUserAuthEvents或带有-events 的 AWS Command Line Interface (AWS CLI) 来查询用户事件历史记录。admin-list-user-auth

您还可以将事件 ID 与 Amazon Cognito 在记录事件时发放的令牌关联起来。ID 和访问令牌在其有效负载中包含此事件 ID。Amazon Cognito 还将刷新令牌的使用与原始事件 ID 相关联。您可以通过原始事件 ID 追溯到导致颁发 Amazon Cognito 令牌的登录事件的事件 ID。您可以跟踪系统中的令牌在特定身份验证事件中的使用。有关更多信息,请参阅将令牌与用户池结合使用

提供事件反馈

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

注意

您的事件反馈会影响 Amazon Cognito 为具有相同特征的后续用户会话分配的风险等级。

在 Amazon Cognito 控制台中,从用户选项卡中选择一个用户,然后选择提供事件反馈。您可以查看事件详细信息,并选择设为有效设为无效

控制台的用户和组选项卡中列出了登录历史记录。您可以选择某个条目来将事件标记为有效或无效。您还可以通过用户池 API 操作和AWS CLI命令 admin-update-auth-event-fe AdminUpdateAuthEventFeedbackedback 提供反馈。

当您在 Amazon Cognito 控制台中选择设为有效或在 API 中提供 validFeedbackValue 值时,您告诉 Amazon Cognito 您信任某个用户会话(Amazon Cognito 已在其中评估了某种风险等级)。当您在 Amazon Cognito 控制台中选择设为无效或在 API 中提供 invalidFeedbackValue 值时,您告诉 Amazon Cognito 您不信任某个用户会话,或者您不认为 Amazon Cognito 评估的风险等级足够高。

发送通知消息

借助高级安全保护措施,Amazon Cognito 可以通知您的用户存在有风险的登录尝试。Amazon Cognito 还可以提示用户选择链接以指示登录是有效还是无效。Amazon Cognito 使用此反馈来提高用户池的风险检测准确性。

自动风险响应部分,对低、中或高风险案例选择通知用户


            通知用户

无论您的用户是否验证了电子邮件地址,Amazon Cognito 都会向他们发送电子邮件通知。

您可以自定义通知电子邮件消息,并提供这些消息的纯文本和 HTML 版本。要自定义您的电子邮件通知,请在高级安全配置中,从自适应身份验证消息中打开电子邮件模板。要了解有关电子邮件模板的更多信息,请参阅 消息模板