AWS CLI を使用して Amazon Cognito でユーザーパスワードをリセットする方法を教えてください。

所要時間2分
0

AWS コマンドラインインターフェイス (AWS CLI) を使用して、ユーザーが Amazon Cognito でパスワードをリセットまたは変更できるようにする方法を学ぶ必要があります。

解決方法

Amazon Cognito のパスワードは、AWS CLI を使用してリセットまたは変更できます。Amazon Cognito 管理者は、パスワードのリセットフローを開始してユーザーパスワードをリセットできます。Amazon Cognito ユーザーは自分でパスワードを変更することができ、またはAmazon Cognito 管理者がユーザーパスワードを一時的または永続的に設定することもできます。

ユーザーパスワードのリセット

パスワードのリセットフローを開始するには、管理者とユーザーが次の手順を実行します。

1.    管理者が AdminResetUserPassword API を呼び出します。

重要: AWS コマンドラインインターフェイス (AWS CLI) コマンド例で、サンプル文字列のすべてのインスタンスを、ご自分の値に置き換えてください。(たとえば、「example_user_pool_id」 を自分のユーザープール ID に置き換えてください。)

admin-reset-user-password の例:

aws cognito-idp admin-reset-user-password --user-pool-id example_user_pool_id --username example_user_name

2.    ユーザーのパスワードがリセットされ、ユーザーがサインインしようとすると、PasswordResetRequiredException 例外が表示されます。次に、ユーザーはパスワードのリセットフローにリダイレクトされます。

**注:**パスワードのリセットフローは、パスワードを忘れた場合のフローと同じです。

3.    確認済みのメールアドレスまたは電話番号を持つユーザーには、パスワードのリセットに必要な確認コードが記載されたメッセージが届きます。

未確認のユーザー属性での作業:

1.    ユーザーが確認済みのメールアドレスまたは電話番号を持っていない場合、管理者は AdminResetUserPassword API を呼び出す際に次のエラーメッセージを受け取ります。

An error occurred (InvalidParameterException) when calling the AdminResetUserPassword operation: Cannot reset password for the user as there is no registered/verified email or phone_number

2.    この問題を解決するには、管理者はAdminUpdateUserAttributes API を呼び出し、email_verified 属性または phone_number_verified 属性をtrue に設定します。

admin-update-user-attributes コマンドの例:

aws cognito-idp admin-update-user-attributes --user-pool-id example_user_pool_id --username example_user_name --user-attributes Name="email_verified",Value="true"

3.    ユーザーが確認コードを受け取らない場合は、問題をトラブルシューティングするためのベストプラクティスに従ってください

ユーザーがパスワードを忘れた場合のフローを完了します:

1.    確認コードを受け取ったら、ユーザーは ConfirmForgotPassword API を呼び出して新しいパスワードを作成できます。

confirm-forgot-password コマンドの例:

aws cognito-idp confirm-forgot-password --client-id example_client_id --username example_user_name --confirmation-code example_code --password example_new password

ユーザーパスワードの変更

ユーザーは自分でパスワードを変更でき、管理者はユーザーパスワードを一時的または永続的に設定できます。ユーザーパスワードを変更するには、ユーザーまたは管理者が次の手順を実行します。

ユーザーがユーザーパスワードを変更:

1.    ユーザーは、ChangePassword API を呼び出します。ChangePassword API を呼び出すには、ユーザーが Amazon Cognito によって発行された有効なアクセストークンを持っている必要があります。

change-password コマンドの例:

aws cognito-idp change-password --previous-password example_old_password --proposed-password example_new_password --access-token valid_access_token

管理者が永続的な新しいユーザーパスワードを作成:

1.    管理者は AdminSetUserPassword API を呼び出して、新しい永久パスワードを作成します。

ユーザーパスワードを永久的に変更するための admin-set-user-password の例:

aws cognito-idp admin-set-user-password --user-pool-id example_user_pool_id --username example_user_name --password example_new_password --permanent

2.    管理者がユーザーパスワードを永久に変更すると、ユーザーは新しいパスワードを使用してアプリケーションにサインインできます。

管理者が一時的な新しいユーザーパスワードを作成:

1.    管理者は AdminSetUserPassword API を呼び出して、新しい一時パスワードを作成します。

ユーザーパスワードを一時的に変更するための admin-set-user-password の例:

aws cognito-idp admin-set-user-password --user-pool-id example_user_pool_id --username example_user_name --password example_temporary_password --no-permanent

管理者がユーザーパスワードを一時パスワードに変更した場合、ユーザーは追加の手順を実行する必要があります。

2.    一時的なパスワードを指定して AdminSetUserPassword API を呼び出すと、ユーザーのステータスが「FORCE_CHANGE_PASSWORD」に変わります。一時パスワードを使用して InitiateAuth API を呼び出してサインインしようとしたユーザーは、「NEW_PASSWORD_REQUIRED」認証チャレンジを受け取ります。

initiate-auth コマンドの例:

aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --auth-parameters USERNAME=example_user_name,PASSWORD=example_temporary_password --client-id example_client_id

出力:

{
  "ChallengeName": "NEW_PASSWORD_REQUIRED",
  "Session": "AYA......",
  "ChallengeParameters": {
    "USER_ID_FOR_SRP": "544.....",
    "requiredAttributes": "[]",
    "userAttributes": "{\"email_verified\":\"true\",\"email\":\"user@example.com\"}"
  }
}

注: セッショントークンの有効性は、アプリケーションクライアントの認証フローセッション時間の設定によって異なります。デフォルトでは、このセッショントークンのセッション時間は 3 分です。トークンの有効性を変更するには、アプリケーションクライアント認証フローのセッション期間を設定する手順を参照してください

3.    ユーザーは、前のステップで受け取ったセッショントークンを使用して RespondToAuthChallenge API を呼び出すことで、「NEW_PASSWORD_REQUIRED」チャレンジに応答します。

respond-to-auth-challenge コマンドの例:

aws cognito-idp respond-to-auth-challenge --client-id example_client_id --challenge-name NEW_PASSWORD_REQUIRED --challenge-responses USERNAME=example_username,NEW_PASSWORD="example_new_password" --session "example_session_token"

4.    ユーザーは ID、アクセストークン、更新トークンを受け取り、アプリケーションにログインします。

重要: アプリクライアントがユーザープールでクライアントシークレットを使用して構成されている場合は、シークレットハッシュを指定する必要があります。詳細については、「 Amazon Cognito ユーザープール API で発生する「クライアント <client-id> のシークレットハッシュを確認できません」エラーをトラブルシューティングする方法を教えてください。」を参照してください。


AWS公式
AWS公式更新しました 1年前