我遇到了多重身份验证 (MFA) 错误,我必须排除我的 Amazon Cognito 用户群体中出现的这些错误。
简短描述
在为您的 Amazon Cognito 用户群体配置 MFA 时,您可能会遇到多种类型的错误。如果您为 MFA 设置了短信服务 (SMS) 消息,请查看以下部分: 在为 MFA 设置 SMS 之前和 SMS MFA 错误。如果您为 MFA 设置了基于时间的一次性密码 (TOTP),请查看以下部分: 在为 MFA 设置 TOTP 之前和 TOTP MFA 错误。
解决方法
在为 MFA 设置 SMS 之前
在将 SMS 设置为 MFA 因素之前,您必须采取其他步骤才能首次发送 SMS 消息。有关更多信息,请参阅首次在 Amazon Cognito 用户群体中设置 SMS 消息收发。
当您启用 MFA 并选择 SMS 作为第二个因素时,Amazon Cognito 可以向未经验证的电话号码发送 SMS 消息。用户完成 SMS 短信 MFA 验证后,Amazon Cognito 会将 phone_number_verified 属性设置为 true。
SMS MFA 错误
InvalidSmsRoleAccessPolicyException
SMS 配置的 AWS 身份和访问管理 (IAM) 角色无权使用 Amazon Simple Notification Service (Amazon SNS) 进行发布。
要排除此错误,请确保将 sns:Publish 权限附加到 IAM 角色。此外,请确保服务控制策略 (SCP) 不会阻止 sns:Publish 操作。
InvalidSmsRoleTrustRelationshipException
当 IAM 角色不具有允许 Amazon Cognito 代入该角色的有效信任关系时,会发生此错误。当 cognito-idp.amazonaws.com 不可信,或者角色策略中的外部 ID 与用户群体 SMS 配置中的外部 ID 不匹配时,会发生这种情况。
要排除此错误,请确保您为 IAM 角色正确配置了信任策略。有关更多信息,请参阅首次在 Amazon Cognito 用户群体中设置 SMS 消息收发。
InvalidParameterException
当 Amazon Cognito 遇到无效的参数时,会发生此错误。
要排除此错误,在为 MFA 设置 SMS 时,请确保将所有必需的值传递给 SetUserPoolMfaConfig API 的 SmsMfaConfiguration 参数。
在为 MFA 设置 TOTP 之前
在您的 Amazon Cognito 用户群体中设置 TOTP 软件令牌 MFA 时,请在配置 TOTP 令牌之前先将 MFA 添加到您的用户群体。
除非用户已通过身份验证,否则在用户尝试登录您的应用程序之前,您无法将 TOTP 令牌与该用户关联。
MFA 不支持用户群体中的联合用户。
TOTP MFA 错误
NotAuthorizedException: 访问令牌没有必需的范围
当访问令牌不包含必需的 aws.cognito.signin.user.admin 范围时,会发生此错误。调用 AssociateSoftwareToken API 时需要 aws.cognito.signin.user.admin 范围。当用户使用 InitiateAuth API 登录时,访问令牌中会自动存在范围。但是,当用户使用托管 UI 登录时,请确保访问令牌中存在 aws.cognito.signin.user.admin 范围。
NotAuthorizedException: 用户的会话无效,会话只能使用一次
当用户多次使用同一个会话时,会发生此错误。如果用户在流程期间收到此错误,则应用程序必须从头重新启动该流程。如果用户在调用 API 时使用会话字符串,则用户无法再次使用该会话。
NotAuthorizedException: 用户的会话无效,会话已到期
当会话有效时间到期时,会发生此错误。默认情况下,会话有效时间为 3 分钟。要排除此错误,请更改应用程序客户端的身份验证流程会话持续时间设置,将会话有效时间延长到 15 分钟。
CodeMismatchException: 用户的代码或身份验证状态无效
当用户的 TOTP 代码无效或用户的状态与调用 API 不兼容时,会发生此错误。例如,如果用户使用名为 MFA_SETUP 的质询调用 RespondToAuthChallenge API,但您没有配置 TOTP MFA,就会发生 CodeMismatchException 错误。要排除此错误,请确保在设置 MFA 时按正确的顺序进行 API 调用。
当用户的 TOTP 代码过旧,Amazon Cognito 无法接受时,也会发生此错误。要排除此错误,请确保用户设备的时间与实际时间同步。
InvalidParameterException: 用户未将交付配置设置为开启 SOFTWARE_TOKEN_MFA
在没有配置 TOTP MFA 的情况下调用 API 尝试强制执行 TOTP MFA 时,会发生此错误。要排除此错误,在对使用 SetUserMFAPreference API 或 AdminSetUserMFAPreference API 的用户强制执行 TOTP 之前,请为用户配置 TOTP MFA。
NotAuthorizedException: 用户的会话无效
当用户调用 API 并且提供的会话字符串不是预期的会话字符串时,会发生此错误。当用户没有按正确的顺序进行 API 调用时,也会发生此错误。要排除此错误,请按相应的顺序配置 API 调用。例如,要在响应中接收会话字符串,用户首先需调用 InitiateAuth API。为防止出现错误,请确认下一个 API 调用在其请求参数中使用返回的会话字符串。
EnableSoftwareTokenMFAException: 代码不匹配
当用户在 TOTP MFA 配置期间未能提供 Amazon Cognito 预期的 TOTP 代码时,会发生此错误。要排除此错误,请在 AssociateSoftwareToken API 中找到 Amazon Cognito 提供的密钥代码,然后将其保存在身份验证器应用程序中。用户还必须提供身份验证器应用程序生成的最新 TOTP 代码。
SoftwareTokenMFANotFoundException: userPool 尚未启用软件令牌 MFA
当您没有为用户群体启用 TOTP MFA 时,会发生此错误。要排除此错误,请在尝试在 Amazon Cognito 中强制执行 TOTP MFA 之前先对其进行配置。
相关信息
将 MFA 添加到用户群体
SMS 短信 MFA
在 Amazon Cognito 本机 API 中为用户配置 MFA