¿Cómo cambiar el estado del usuario FORCE_CHANGE_PASSWORD?
Al utilizar AWS Cognito, quiero crear usuarios ficticios con fines de prueba.
Luego uso la consola de AWS para crear dicho usuario, pero el estado del usuario está establecido en FORCE_CHANGE_PASSWORD
. Con ese valor, este usuario no puede autenticarse.
¿Hay alguna manera de cambiar este estado?
ACTUALIZAR Mismo comportamiento al crear un usuario desde CLI
Esto finalmente se agregó a AWSCLI: https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/admin-set-user-password.html
Puede cambiar la contraseña de un usuario y actualizar el estado usando:
aws cognito-idp admin-set-user-password \
--user-pool-id <your-user-pool-id> \
--username <username> \
--password <password> \
--permanent
Antes de usar esto, es posible que necesite actualizar su AWS CLI usando:
pip3 install awscli --upgrade
Sé que ha pasado un tiempo, pero pensé que esto podría ayudar a otras personas que encuentren esta publicación.
Puede utilizar la CLI de AWS para cambiar la contraseña de los usuarios; sin embargo, es un proceso de varios pasos:
Paso 1: obtenga un token de sesión para el usuario deseado:
aws cognito-idp admin-initiate-auth --user-pool-id %USER POOL ID% --client-id %APP CLIENT ID% --auth-flow ADMIN_NO_SRP_AUTH --auth-parameters USERNAME=%USERS USERNAME%,PASSWORD=%USERS CURRENT PASSWORD%
Si esto devuelve un error sobre
Unable to verify secret hash for client
, cree otra aplicación cliente sin un secreto y use ese ID de cliente.
Paso 2: Si el paso 1 tiene éxito, responderá con el desafío NEW_PASSWORD_REQUIRED
, otros parámetros del desafío y la clave de sesión del usuario. Luego, puede ejecutar el segundo comando para emitir la respuesta al desafío:
aws cognito-idp admin-respond-to-auth-challenge --user-pool-id %USER POOL ID% --client-id %CLIENT ID% --challenge-name NEW_PASSWORD_REQUIRED --challenge-responses NEW_PASSWORD=%DESIRED PASSWORD%,USERNAME=%USERS USERNAME% --session %SESSION KEY FROM PREVIOUS COMMAND with ""%
Si recibe un error acerca de
Invalid attributes given, XXX is missing
pasar los atributos faltantes usando el formatouserAttributes.$FIELD_NAME=$VALUE
El comando anterior debería devolver un resultado de autenticación válido y los tokens apropiados.
Importante: Para que esto funcione, el grupo de usuarios de Cognito DEBE tener una aplicación cliente configurada con ADMIN_NO_SRP_AUTH
funcionalidad ( Paso 5 en este documento ).
Puede cambiar el estado de ese usuario FORCE_CHANGE_PASSWORD
llamando respondToAuthChallenge()
al usuario de esta manera:
var params = {
ChallengeName: 'NEW_PASSWORD_REQUIRED',
ClientId: 'your_own3j6...0obh',
ChallengeResponses: {
USERNAME: 'user3',
NEW_PASSWORD: 'changed12345'
},
Session: 'xxxxxxxxxxZDMcRu-5u...sCvrmZb6tHY'
};
cognitoidentityserviceprovider.respondToAuthChallenge(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(data); // successful response
});
Después de esto, verás en la consola que el
user3
estado esCONFIRMED
.