如何对我的 Amazon Cognito 用户池中的 MFA 错误消息进行故障排除?
我在我的 Amazon Cognito 用户池中配置多重身份验证 (MFA) 时收到错误消息。
解决方法
对 SMS MFA 错误进行故障排除
“InvalidSmsRoleAccessPolicyException”错误
当 AWS Identity and Access Management (IAM) 角色无权使用 Amazon SNS 发布短信时,就会出现此错误。
要解决此问题,请完成以下步骤,为 IAM 角色添加 sns:Publish 权限:
- 打开 Amazon Cognito 控制台。
- 在导航窗格中,选择 User pools(用户池)。
- 选择您的用户池。
- 在导航窗格的 Authentication(身份验证)下,选择 Authentication methods(身份验证方法)。
- 在 SMS 部分中,记下 IAM role ARN(IAM 角色 ARN)的名称。
- 打开 IAM 控制台。
- 在导航窗格中,选择 Roles(角色)。
- 在搜索栏中,输入您的 IAM 角色的名称,然后选择您的 IAM 角色。
- 在 Permissions policies(权限策略)部分中,选择附加到 IAM 角色的策略。
- 在 Policy details(策略详细信息)页面上,选择 Edit(编辑)以添加 sns:publish 权限。
- 选择 Next(下一步)。
- 选择 Save changes(保存更改)。
- 确认服务控制策略 (SCP) 不会阻止 sns:Publish 操作。
“InvalidSmsRoleTrustRelationshipException”错误
当 IAM 角色不具有允许 Amazon Cognito 代入该角色的信任关系时,就会出现此错误。当 cognito-idp.amazonaws.com 不可信,或者角色信任策略中的外部 ID 与用户群体 SMS 配置中的外部 ID 不匹配时,会发生这种情况。
要解决此问题,请正确配置 IAM 角色的信任策略。有关说明,请参阅准备一个 Amazon Cognito 可以用来通过 AWS 终端用户消息发送 SMS 服务发送短信的 IAM 角色。
“InvalidParameterException”错误
当 API 请求向 Amazon Cognito 发送无效参数时,就会出现此错误。要解决此问题,请在 SetUserPoolMfaConfig API 的 SmsMfaConfiguration 参数中指定所有必需的值。
对 TOTP MFA 错误进行故障排除
要求:
- 在配置基于时间的一次性密码 (TOTP) 软件令牌之前,将 MFA 添加到您的用户池。
- 如果 Amazon Cognito 未对您的用户进行身份验证,则您的用户必须尝试登录您的应用程序,然后才能将 TOTP 令牌与他们进行关联。
**注意:**外部身份提供者 (IdP) 为联合用户管理 MFA。在用户联合身份验证期间,Amazon Cognito 不会提示进行 MFA。
“NotAuthorizedException: Access token does not have required scopes”错误
当访问令牌不包括调用 AssociateSoftwareToken API 所需的 aws.cognito.signin.user.admin 范围时,就会出现此错误。当用户使用 InitiateAuth API 登录时,InitiateAuth API 会自动将此范围包含在访问令牌中。
但是,当用户使用托管登录页面登录时,请验证访问令牌是否包含 aws.cognito.signin.user.admin 范围。要检查令牌是否包含 aws.cognito.signin.user.admin 范围,请使用 Base64 对访问令牌的有效载荷进行解码。有关详细信息,请参阅确认 JWT 的结构。
如果令牌不包括 aws.cognito.signin.user.admin 范围,请完成以下步骤进行添加:
- 打开 Amazon Cognito 控制台。
- 在导航窗格中,选择 User Pools(用户池)。
- 选择要修改的用户池。
- 在导航窗格的 Applications(应用程序)下,选择 App clients(应用程序客户端)。
- 选择要修改的应用程序客户端。
- 选择 Login pages(登录页面)选项卡,然后选择 Edit(编辑)。
- 在 OpenID Connect scopes(OpenID Connect 范围)下拉列表中,选择 aws.cognito.signin.user.admin。
- 选择 Save changes(保存更改)。
“NotAuthorizedException: Invalid session for the user, session can only be used once”错误
当用户尝试使用重用会话时,就会出现此错误。如果用户在使用 TOTP MFA 进行身份验证的过程中收到此错误,则他们必须从头开始重启身份验证过程。要重启身份验证,请使用 InitiateAuth API 或 AdminInitiateAuth API。
“NotAuthorizedException: Invalid session for the user, session is expired”错误
会话到期时会出现此错误。默认情况下,会话在 3 分钟后到期。
要解决此问题,请延长应用程序客户端中的身份验证会话流持续时间。您可以将持续时间延长至 15 分钟。
“CodeMismatchException: Invalid code or auth state for the user”错误
当用户的 TOTP 代码无效、用户的状态不支持 API 调用或 TOTP 代码到期时,就会出现此错误。例如,用户使用 MFA_SETUP 挑战调用 RespondToAuthChallenge API,但未配置 TOTP MFA。
要解决此问题,请完成以下步骤:
- 为用户配置 TOTP MFA。
- 使用 MFA_SETUP 挑战调用 RespondToAuthChallenge API。
- 验证您的用户设备的时间设置是否与当前时间相匹配,以生成有效的 TOTP 代码。
“InvalidParameterException: User does not have delivery config set to turn on SOFTWARE_TOKEN_MFA”错误
当您没有为用户配置 TOTP MFA 时,就会出现此错误。要解决此问题,请在调用 SetUserMFAPreference API 或 AdminSetUserMFAPreference API 之前配置 TOTP MFA。
“SoftwareTokenMFANotFoundException: Software Token MFA has not been enabled by the userPool”错误
出现此错误是因为您没有在用户池中配置 TOTP MFA。要解决该错误,请配置 TOTP MFA。
“NotAuthorizedException: Invalid session for the use”错误
出现此错误的原因如下:
- API 调用包含不正确的会话字符串。
- API 调用的顺序不正确。
要解决此问题,请按正确的顺序配置 API 调用。例如,要在响应中接收会话字符串,请先调用 InitiateAuth API。为防止出现问题,请验证下一个 API 调用是否在其请求参数中使用返回的会话字符串。
“EnableSoftwareTokenMFAException: Code mismatch”错误
当用户提交的 TOTP 代码与 Amazon Cognito 在 TOTP MFA 配置期间的期望不匹配时,就会出现此错误。
要解决此问题,请执行以下操作:
- 从 AssociateSoftwareToken API 检索密码。
- 将密码保存在身份验证器应用程序中。
- 提交最新的 TOTP 代码。
- 使用从 AssociateSoftwareToken API 中检索到的密码来生成二维码。然后,使用以下代码示例来配置您的身份验证器应用程序。
从密码生成二维码的 Python 代码示例:
import pyotp from qrcode.main import QRCode secret_key = "secret-key-retrieved-from-associate-software-token-api" totp = pyotp.TOTP(secret_key) provisioning_uri = totp.provisioning_uri() qr = QRCode() qr.add_data(provisioning_uri) qr.make() qr.print_ascii()
对电子邮件 MFA 错误进行故障排除
在将电子邮件设置为 MFA 因素之前,必须在用户池中配置 Amazon Simple Email Service (Amazon SES) 以向用户发送电子邮件。
当您激活 MFA 并选择电子邮件作为第二因素时,Amazon Cognito 会向未经验证的电子邮件地址发送电子邮件。用户完成电子邮件 MFA 验证后,Amazon Cognito 会将 email_verified 属性设置为 true。
“InvalidParameterException: Cannot set EmailMfaConfiguration when user pool EmailConfiguration contains an EmailSendingAccount of COGNITO_DEFAULT”错误
当您使用默认电子邮件配置时,就会出现此错误。要解决此问题,请为您的用户池配置 Amazon SES 电子邮件设置。
“InvalidParameterException: Cannot set EmailMfaConfiguration when user pool AccountRecoverySetting is not set or contains only verified_email in RecoveryMechanisms”错误
当您仅使用电子邮件作为用户的账户恢复方法时,就会出现此错误。您无法在 MFA 和账户恢复中使用相同的因素。要解决此问题,请选择其他账户恢复方法而不是电子邮件。有关说明,请参阅配置密码重置和恢复。
“FeatureUnavailableInTierException”错误
当您的用户池拥有 Lite 功能计划时,就会出现此错误。只有 Essentials 和 Plus 计划包含电子邮件 MFA。要解决此问题,请将用户池的计划切换到 Essentials 或 Plus。
相关信息
- 语言
- 中文 (简体)

相关内容
AWS 官方已更新 1 年前