エラーレスポンスの管理 - Amazon Cognito

エラーレスポンスの管理

Amazon Cognito は、ユーザープールから返されるエラーレスポンスのカスタマイズをサポートしています。カスタムエラーレスポンスは、認証、確認、およびパスワードリカバリ関連の操作に利用できます。ユーザープールアプリクライアントの PreventUserExistenceErrors 設定を使用して、ユーザーの存在に関連するエラーを有効または無効にします。

カスタムエラーレスポンスを有効にすると、Amazon Cognito 認証 API が認証失敗の汎用レスポンスを返します。エラーレスポンスは、ユーザー名またはパスワードが正しくないことを伝えます。Amazon Cognito のアカウント確認 API とパスワードリカバリ API は、コードがシミュレートされた配信メディアに送信されたことを示すレスポンスを返します。エラーレスポンスは、ステータスが ENABLED であり、ユーザーが存在しないときに機能します。以下は、PreventUserExistenceErrorsENABLED に設定されている場合の Amazon Cognito 操作の詳細な動作です。

ユーザー認証オペレーション

以下の操作では、どちらの認証フロー方式も使用可能です。

  • AdminInitiateAuth

  • AdminRespondToAuthChallenge

  • InitiateAuth

  • RespondToAuthChallenge

ユーザー名とパスワードによる認証

ADMIN_USER_PASSWORD_AUTH および USER_PASSWORD_AUTH の認証フローでは、単一の InitiateAuth コールでユーザー名とパスワードが返されます。Amazon Cognito は、ユーザー名またはパスワードが正しくないことを示す汎用 NotAuthorizedException エラーを返します。

セキュアリモートパスワード (SRP) ベースの認証

USER_SRP_AUTH 認証フローでは、Amazon Cognito が最初のステップでユーザー名と SRP パラメータ「A」を受け取ります。レスポンスでは、Amazon Cognito が SRP プロトコルに従って、ユーザーについて SRP パラメータ「B」と「salt」を返します。ユーザーが見つからない場合、RFC 5054 で説明されているように、Amazon Cognito は最初のステップでシミュレートされたレスポンスを返します。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 は、既存ユーザーの E メールまたは電話番号に確認コードを送信します。

ConfirmSignUp

コードの有効期限が切れている場合は、ExpiredCodeException が返されます。Amazon Cognito は、ユーザーが承認されていない場合に NotAuthorizedException を返します。コードがサーバーが期待するものと一致しない場合、Amazon Cognito は CodeMismatchException を返します。

SignUp

SignUp 操作は、ユーザー名がすでに使用されている場合に UsernameExistsException を返します。SignUp 中の E メールまたは電話番号の UsernameExistsException エラーを防ぐために、検証ベースのエイリアスを使用できます。詳細については、Amazon Cognito API リファレンスガイドの「AliasAttributes」を参照してください。エイリアスの詳細については、「エイリアスの概要」を参照してください。

インポート済みユーザー

PreventUserExistenceErrors が有効になっている場合は、インポートされたユーザーの認証中、PasswordResetRequiredException を返す代わりに、ユーザー名またはパスワードが正しくなかったことを示す NotAuthorizedException エラーが返されます。詳細については、「インポートされたユーザーに対するパスワードのリセットの要求」を参照してください。

ユーザー移行の Lambda トリガー

Lambda トリガーによって元のイベントコンテキストに空のレスポンスが設定された場合、Amazon Cognito は存在しないユーザーについてシミュレートされたレスポンスを返します。詳細については、「ユーザー移行の Lambda トリガー」を参照してください。

カスタム認証チャレンジの Lambda トリガー

カスタム認証チャレンジの Lambda トリガーを使用しており、エラーレスポンスを有効にする場合は、LambdaChallengeUserNotFound という名前のブールパラメータを返します。その後、それが DefineAuthChallengeVerifyAuthChallenge、および CreateAuthChallenge Lambda トリガーのリクエストに渡されます。このトリガーを使用して、存在しないユーザーのカスタム認証チャレンジをシミュレートできます。存在しないユーザーに対して事前認証の Lambda トリガーを呼び出す場合、Amazon Cognito は UserNotFound を返します。