管理错误响应 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

管理错误响应

Amazon Cognito 支持自定义由用户池返回的错误响应。自定义错误响应可用于与身份验证、确认和密码恢复相关的操作。使用用户池应用程序客户端的 PreventUserExistenceErrors 设置,以启用或禁用用户存在相关错误。

启用自定义错误响应后,Amazon Cognito 身份验证 API 将返回一个通用的身份验证故障响应。错误响应告知您用户名或密码不正确。Amazon Cognito 账户确认和密码恢复 API 返回一个响应,指示代码已发送到模拟的传输媒介。当状态为ENABLED并且用户不存在时错误响应工作。以下是在 PreventUserExistenceErrors 设置为ENABLED时,Amazon Cognito 操作的详细行为:

用户身份验证操作

您可以将任一身份验证流方法与以下操作搭配使用。

  • AdminInitiateAuth

  • AdminRespondToAuthChallenge

  • InitiateAuth

  • RespondToAuthChallenge

基于用户名密码的身份验证

ADMIN_USER_PASSWORD_AUTHUSER_PASSWORD_AUTH 的身份验证流程中,用户名以及密码通过一次 InitiateAuth 调用返回。Amazon Cognito 返回一个通用 NotAuthorizedException 错误,指示用户名或密码不正确。

基于安全远程密码(SRP)的身份验证

在 USER_SRP_AUTH 身份验证流程中,Amazon Cognito 服务在第一步中收到用户名和 SRP 参数“A”。作为响应,Amazon Cognito 根据 SRP 协议为用户返回 SRP 参数“B”和“salt”。如果找不到用户,Amazon Cognito 会在第一步中返回一个模拟响应,如 RFC 5054 中所述。Amazon Cognito 始终针对相同的用户名和用户池组合返回相同的“salt”以及通用唯一标识符(UUID)格式的内部用户 ID。当 RespondToAuthChallenge 密码证明的下一个操作运行时,Amazon Cognito 会返回一个通用 NotAuthorizedException 错误,指示用户名或密码不正确。

注意

如果您正在使用基于验证的别名,并且不可改变的用户名格式不是 UUID,则可以使用 UsernamePassword 来模拟通用响应。

ForgotPassword

当找不到用户、用户已停用或没有经过验证的传送机制来恢复其密码时,Amazon Cognito 会为用户返回 CodeDeliveryDetails 以及模拟的传递媒介。模拟的传输媒介由用户池的输入用户名格式和验证设置决定。

ConfirmForgotPassword

Amazon Cognito 为不存在或已禁用的用户返回 CodeMismatchException 错误。如果在使用 ForgotPassword 时不请求代码,Amazon Cognito 将返回 ExpiredCodeException 错误。

ResendConfirmationCode

Amazon Cognito 为已禁用或不存在的用户返回 CodeDeliveryDetails。Amazon Cognito 会向现有用户的电子邮件或电话发送确认码。

ConfirmSignUp

如果代码已过期,则将返回 ExpiredCodeException。当用户未被授权时,Amazon Cognito 返回 NotAuthorizedException。如果代码与服务器期望的代码不匹配,则 Amazon Cognito 返回 CodeMismatchException

SignUp

当已使用用户名时,SignUp 操作返回 UsernameExistsException。为防止在 UsernameExistsException 期间对于电子邮件或电话号码发生 SignUp 错误,您可以使用基于验证的别名。有关更多信息,请参阅 AliasAttributes Amazon Cognito API 参考指南。有关别名的更多信息,请参阅别名概览

导入的用户

如果PreventUserExistenceErrors已启用,则在对导入的用户进行身份验证期间,返回通用NotAuthorizedException错误,指示用户名或密码不正确,而不是返回PasswordResetRequiredException。请参阅要求导入的用户重置密码,了解更多信息。

迁移用户 Lambda 触发器

当 Lambda 触发器在原始事件上下文中设置了空响应时,Amazon Cognito 将为不存在的用户返回模拟响应。有关更多信息,请参阅迁移用户 Lambda 触发器

自定义身份验证质询 Lambda 触发器

如果您使用自定义身份验证质询 Lambda 触发器并启用错误响应,则 LambdaChallenge 将返回一个名为 UserNotFound 的布尔值参数。然后它在 DefineAuthChallengeVerifyAuthChallengeCreateAuthChallenge Lambda 触发器请求后传递。您可以使用此触发器来模拟不存在用户的自定义授权质询。如果您为不存在的用户调用预身份验证 Lambda 触发器,则 Amazon Cognito 将返回UserNotFound