¿Cómo restablezco las contraseñas de usuario en Amazon Cognito con la AWS CLI?

5 minutos de lectura
0

Necesito aprender a usar la Interfaz de la línea de comandos de AWS (AWS CLI) para ayudar a los usuarios a restablecer o cambiar sus contraseñas en Amazon Cognito.

Solución

Las contraseñas de Amazon Cognito se pueden restablecer o cambiar con la AWS CLI. El administrador de Amazon Cognito puede iniciar el flujo de restablecimiento de contraseñas de los usuarios. El usuario de Amazon Cognito puede cambiar su contraseña él mismo, o el administrador de Amazon Cognito puede establecer la contraseña del usuario de forma temporal o permanente.

Restablecer una contraseña de usuario

Para iniciar un flujo de restablecimiento de contraseña, el administrador y el usuario deben seguir los siguientes pasos:

1.    El administrador invoca la API AdminResetUserPassword.

Importante: En estos ejemplos de comandos de la Interfaz de la línea de comandos de AWS (AWS CLI), sustituya todas las instancias de las cadenas de ejemplo por los valores correspondientes. (Por ejemplo, sustituya “example_user_pool_id” por el ID de su grupo de usuarios).

Ejemplo del comando admin-reset-user-password:

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

2.    Cuando se restablece la contraseña de un usuario y este intenta iniciar sesión, recibe la excepción PasswordResetRequiredException. A continuación, se redirige al usuario al flujo de restablecimiento de contraseña.

Nota: El flujo de restablecimiento de contraseña es el mismo que el flujo por contraseña olvidada.

3.    El usuario con una dirección de correo electrónico o un número de teléfono verificados recibe un mensaje con el código de confirmación que necesita para restablecer su contraseña.

El usuario no tiene atributos verificados:

1.    Si el usuario no tiene una dirección de correo electrónico ni un número de teléfono verificados, el administrador recibirá el siguiente mensaje de error al invocar la API AdminResetUserPassword:

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.    Para solucionar este problema, el administrador debe invocar la API AdminUpdateUserAttributes y establecer los atributos email_verified o phone_number_verified en true (verdadero).

Ejemplo del comando 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.    Si el usuario no recibe el código de confirmación, deberá seguir las prácticas recomendadas para solucionar el problema.

El usuario completa el flujo por contraseña olvidada:

1.    Tras recibir el código de confirmación, el usuario puede crear una nueva contraseña invocando la API ConfirmForgotPassword.

Ejemplo del comando 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

Cambiar la contraseña de un usuario

Los usuarios pueden cambiar sus contraseñas ellos mismos, o los administradores pueden configurar las contraseñas de los usuarios de forma temporal o permanente. Para cambiar la contraseña de un usuario, este o el administrador deben seguir los pasos que se indican a continuación:

El usuario cambia su contraseña:

1.    El usuario invoca la API ChangePassword. El usuario debe tener un token de acceso válido emitido por Amazon Cognito para invocar la API ChangePassword.

Ejemplo del comando change-password:

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

El administrador crea una nueva contraseña permanente de usuario:

1.    El administrador invoca la API AdminSetUserPassword para crear una nueva contraseña permanente.

Ejemplo de admin-set-user-password para cambiar la contraseña del usuario de forma permanente:

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

2.    Después de que el administrador cambie permanentemente la contraseña del usuario, este podrá utilizar la nueva contraseña para iniciar sesión en la aplicación.

El administrador crea una nueva contraseña temporal de usuario:

1.    El administrador invoca la API AdminSetUserPassword para crear una nueva contraseña temporal.

Ejemplo de admin-set-user-password para cambiar la contraseña del usuario de forma temporal:

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

Si el administrador cambia la contraseña del usuario por una contraseña temporal, el usuario deberá completar pasos adicionales.

2.    El estado del usuario cambia a “FORCE_CHANGE_PASSWORD” tras invocar la API AdminSetUserPassword con una contraseña temporal. El usuario que intente iniciar sesión invocando la API InitiateAuth con una contraseña temporal recibirá un desafío de autenticación “NEW_PASSWORD_REQUIRED”.

Ejemplo del comando 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

Salida:

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

Nota: La validez del token de la sesión depende de la duración de la sesión del flujo de autenticación del cliente. De forma predeterminada, la duración de la sesión de este token de sesión es de 3 minutos. Para modificar la validez del token, consulte los pasos para configurar la duración de la sesión del flujo de autenticación del cliente.

3.    El usuario responde al desafío “NEW_PASSWORD_REQUIRED” invocando la API RespondToAuthChallenge con el token de sesión que recibió en el paso anterior.

Ejemplo del comando 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.    El usuario recibe los tokens de ID, acceso y actualización e inicia sesión en la aplicación.

Importante: Si el cliente de la aplicación está configurado con un secreto de cliente en el grupo de usuarios, deberá proporcionar el hash del secreto. Para obtener más información, consulte How do I troubleshoot “Unable to verify secret hash for client <client-id>” errors from my Amazon Cognito user pools API? (¿Cómo soluciono el error “No se pudo verificar el hash del secreto para el cliente <client-id>” de la API de grupos de usuarios de Amazon Cognito?)


OFICIAL DE AWS
OFICIAL DE AWSActualizada hace un año