翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
ユーザー存在エラー応答の管理
Amazon Cognito は、ユーザープールから返されるエラーレスポンスのカスタマイズをサポートしています。カスタムエラーレスポンスは、ユーザーの作成と認証、パスワードリカバリ、および確認操作に利用できます。
ユーザープールアプリクライアントの PreventUserExistenceErrors
設定を使用して、ユーザーの存在に関連するエラーを有効または無効にします。Amazon Cognito ユーザープール を使用して新しいアプリケーションクライアントを作成するとAPI、デフォルトで PreventUserExistenceErrors
は LEGACY
であるか、無効になっています。Amazon Cognito コンソールでは、オプション「ユーザー存在エラーの防止」 - ENABLED
for の設定 PreventUserExistenceErrors
- がデフォルトで選択されています。PreventUserExistenceErrors
設定を更新するには、次のいずれかを実行します。
-
LEGACY
のPreventUserExistenceErrors
ENABLED
と の間の値を変更する UpdateUserPoolClient API リクエスト。 -
Amazon Cognito コンソールでアプリケーションクライアントを編集し、選択した (
ENABLED
) と選択解除された () の間でユーザー存在防止エラーの状態を変更しますLEGACY
。
このプロパティの値が の場合LEGACY
、ユーザーがユーザープールに存在しないユーザー名でサインインしようとすると、アプリケーションクライアントはUserNotFoundException
エラーレスポンスを返します。
このプロパティの値が の場合ENABLED
、アプリケーションクライアントはユーザープールにユーザーアカウントが存在しないことをUserNotFoundException
エラーで開示しません。PreventUserExistenceErrors
の設定ENABLED
には、次の効果があります。
-
Amazon Cognito は、応答によって有効なユーザーが存在することが開示される可能性のあるAPIリクエストに、非特定の情報で応答します。
-
Amazon Cognito サインインと forgot-password は、一般的な認証失敗レスポンスAPIsを返します。エラーレスポンスは、ユーザー名またはパスワードが正しくないことを伝えます。
-
Amazon Cognito アカウントの確認とパスワードの復旧は、ユーザーの連絡先情報の一部を表すのではなく、シミュレートされた配信メディアにコードが送信されたことを示すレスポンスAPIsを返します。
次の情報は、 PreventUserExistenceErrors
が に設定されている場合のユーザープールオペレーションの動作を詳しく示していますENABLED
。
認証とユーザー作成オペレーション
エラーレスポンスは、Username-password 認証と Secure Remote Password (SRP) 認証の両方で設定できます。カスタム認証で返すエラーをカスタマイズすることもできます。次の認証オペレーションAPIsを実行します。
-
AdminInitiateAuth
-
AdminRespondToAuthChallenge
-
InitiateAuth
-
RespondToAuthChallenge
次のリストは、ユーザー認証オペレーションのエラーレスポンスをカスタマイズする方法を示しています。
- ユーザー名およびパスワード認証
-
ADMIN_USER_PASSWORD_AUTH
と でユーザーをサインインするにはUSER_PASSWORD_AUTH
、AdminInitiateAuth
またはInitiateAuth
APIリクエストにユーザー名とパスワードを含めます。Amazon Cognito は、ユーザー名またはパスワードが正しくない場合、汎用NotAuthorizedException
エラーを返します。 - セキュアリモートパスワード (SRP) ベースの認証
-
でユーザーにサインインするには
USER_SRP_AUTH
、AdminInitiateAuth
またはInitiateAuth
APIリクエストにユーザー名とSRP_A
パラメータを含めます。これに応じて、Amazon Cognito はユーザーに対してSRP_B
と ソルトを返します。ユーザーが見つからなかった場合、Amazon Cognito は RFC5054で説明されているように、最初のステップでシミュレートされたレスポンスを返します。Amazon Cognito は、同じソルトと内部ユーザー ID を同じユーザー名とユーザープールの組み合わせのUUID形式で返します。パスワードの証明を使用して RespondToAuthChallenge
APIリクエストを送信すると、Amazon Cognito はユーザー名またはパスワードが正しくない場合に一般的なNotAuthorizedException
エラーを返します。注記
検証ベースのエイリアス属性を使用していて、変更不可能なユーザー名が としてフォーマットされていない場合、ユーザー名とパスワード認証を使用して一般的なレスポンスをシミュレートできますUUID。
- カスタム認証チャレンジの Lambda トリガー
-
カスタム認証チャレンジの Lambda トリガーを使用しており、エラーレスポンスを有効にする場合は、
LambdaChallenge
がUserNotFound
という名前のブールパラメータを返します。その後、それがDefineAuthChallenge
、VerifyAuthChallenge
、およびCreateAuthChallenge
Lambda トリガーのリクエストに渡されます。このトリガーを使用して、存在しないユーザーのカスタム認可チャレンジをシミュレートできます。存在しないユーザーに対して事前認証の Lambda トリガーを呼び出す場合、Amazon Cognito はUserNotFound
を返します。
次のリストは、ユーザー作成オペレーションのエラーレスポンスをカスタマイズする方法を示しています。
- SignUp
-
ユーザー名が既に取得
UsernameExistsException
されている場合、SignUp
オペレーションは常に を返します。アプリケーションでユーザーをサインアップするときに Amazon Cognito が E メールアドレスと電話番号のUsernameExistsException
エラーを返さないようにするには、検証ベースのエイリアス属性を使用してください。エイリアスの詳細については、「ログイン属性のカスタマイズ」を参照してください。Amazon Cognito がユーザープール内のユーザーを検出するための
SignUp
APIリクエストの使用を防ぐ方法の例については、「」を参照してくださいサインアップ時のメールアドレスと電話番号の UsernameExistsException エラーの防止。 - インポート済みユーザー
-
PreventUserExistenceErrors
が有効になっている場合は、インポートされたユーザーの認証中、PasswordResetRequiredException
を返す代わりに、ユーザー名またはパスワードが正しくなかったことを示すNotAuthorizedException
エラーが返されます。詳細については、「インポートされたユーザーに対するパスワードのリセットの要求」を参照してください。 - ユーザー移行の Lambda トリガー
-
Lambda トリガーによって元のイベントコンテキストに空のレスポンスが設定された場合、Amazon Cognito は存在しないユーザーについてシミュレートされたレスポンスを返します。詳細については、「ユーザー移行の Lambda トリガー」を参照してください。
サインアップ時のメールアドレスと電話番号の UsernameExistsException
エラーの防止
次の例は、ユーザープールでエイリアス属性を設定するときに、SignUp
APIリクエストに応答して重複した E メールアドレスと電話番号がUsernameExistsException
エラーを生成しないようにする方法を示しています。E メールアドレスまたは電話番号をエイリアス属性として使用してユーザープールを作成しておく必要があります。詳細については、ユーザープール属性の「エイリアス」セクションを参照してください。
-
Jie は新しいユーザー名にサインアップし、E メールアドレス
jie@example.com
も提供します。Amazon Cognito がユーザーの E メールアドレスにコードを送信します。AWS CLI コマンドの例
aws cognito-idp sign-up --client-id 1234567890abcdef0 --username jie --password PASSWORD --user-attributes Name="email",Value="jie@example.com"
レスポンスの例
{ "UserConfirmed": false, "UserSub": "
<subId>
", "CodeDeliveryDetails": { "AttributeName": "email", "Destination": "j****@e****", "DeliveryMedium": "EMAIL" } } -
Jie は、E メールアドレスの所有権を確認するために送信されたコードを提供します。これで、ユーザーとしての登録は完了です。
AWS CLI コマンドの例
aws cognito-idp confirm-sign-up --client-id 1234567890abcdef0 --username=jie --confirmation-code xxxxxx
-
Shirley は新しいユーザーアカウントを登録し、E メールアドレス
jie@example.com
を提供します。Amazon Cognito はUsernameExistsException
エラーを返さず、確認コードを Jie の E メールアドレスに送信します。AWS CLI コマンドの例
aws cognito-idp sign-up --client-id 1234567890abcdef0 --username shirley --password PASSWORD --user-attributes Name="email",Value="jie@example.com"
レスポンスの例
{ "UserConfirmed": false, "UserSub": "
<new subId>
", "CodeDeliveryDetails": { "AttributeName": "email", "Destination": "j****@e****", "DeliveryMedium": "EMAIL" } } -
別のシナリオでは、Shirley が
jie@example.com
の所有権を持っています。Shirley は Amazon Cognito が Jie の E メールアドレスに送信したコードを取得し、アカウントの確認を試みます。AWS CLI コマンドの例
aws cognito-idp confirm-sign-up --client-id 1234567890abcdef0 --username=shirley --confirmation-code xxxxxx
レスポンスの例
An error occurred (AliasExistsException) when calling the ConfirmSignUp operation: An account with the email already exists.
jie@example.com
が既存のユーザーに割り当てられているにもかかわらず、Amazon Cognito は Shirley の aws cognito-idp sign-up
リクエストにエラーを返しません。Amazon Cognito がエラーレスポンスを返す前に、Shirley は E メールアドレスの所有権を証明する必要があります。エイリアス属性を持つユーザープールでは、この動作により、特定の E メールアドレスまたは電話番号を持つユーザーが存在するかどうかをチェックSignUp
APIするために、パブリックが使用できなくなります。
この動作は、次の例に示すように、Amazon Cognito が既存のユーザー名の SignUp
リクエストに対して返すレスポンスとは異なります。Shirley はこのレスポンスから、そのユーザー名 jie
を持つユーザーが既に存在することを知っていますが、そのユーザーに関連する E メールアドレスや電話番号については知りません。
CLI コマンドの例
aws cognito-idp sign-up --client-id 1example23456789 --username jie --password PASSWORD --user-attributes Name="email",Value="shirley@example.com"
レスポンスの例
An error occurred (UsernameExistsException) when calling the SignUp operation: User already exists
パスワードのリセットオペレーション
ユーザー存在エラーを防ぐと、Amazon Cognito は、ユーザーパスワードのリセット操作に対して以下の応答を返します。
- ForgotPassword
-
ユーザーが見つからない、非アクティブ化されている、またはパスワードを回復するための検証済みの配信メカニズムがない場合、Amazon Cognito はそのユーザーについてシミュレート済みの配信ミディアムを用いた
CodeDeliveryDetails
を返します。シミュレートされた配信メディアは、入力ユーザー名形式とユーザープールの検証設定によって決まります。 - ConfirmForgotPassword
-
Amazon Cognito は、存在しない、または無効になっているユーザーについて
CodeMismatchException
エラーを返します。ForgotPassword
の使用時にコードが要求されない場合、Amazon Cognito はExpiredCodeException
エラーを返します。
確認オペレーション
ユーザー存在エラーを防ぐと、Amazon Cognito は、ユーザーの確認および検証の操作に対して以下の応答を返します。
- ResendConfirmationCode
-
Amazon Cognito は、無効化されたユーザー、または存在しないユーザーについて
CodeDeliveryDetails
を返します。Amazon Cognito は、既存ユーザーの E メールまたは電話番号に確認コードを送信します。 - ConfirmSignUp
-
コードの有効期限が切れている場合は、
ExpiredCodeException
が返されます。Amazon Cognito は、ユーザーが承認されていない場合にNotAuthorizedException
を返します。コードがサーバーが期待するものと一致しない場合、Amazon Cognito はCodeMismatchException
を返します。