Con AWS Cognito, quiero crear usuarios ficticios con fines de prueba.
Luego utilizo la consola de AWS para crear dicho usuario, pero el usuario tiene su estado establecido en FORCE_CHANGE_PASSWORD
. Con ese valor, este usuario no puede autenticarse.
¿Hay alguna forma de cambiar este estado?
ACTUALIZAR El mismo comportamiento al crear un usuario desde CLI
amazon-web-services
aws-cli
amazon-cognito
Dominique Vial
fuente
fuente
Respuestas:
Lamento que tengas dificultades. No tenemos un proceso de un solo paso en el que puede crear usuarios y autenticarlos directamente. Podríamos cambiar esto en el futuro para permitir que los administradores establezcan contraseñas que los usuarios puedan utilizar directamente. Por ahora, cuando crea usuarios usando
AdminCreateUser
o registrando usuarios con la aplicación, se requieren pasos adicionales, ya sea forzando a los usuarios a cambiar la contraseña al iniciar sesión o haciendo que los usuarios verifiquen el correo electrónico o el número de teléfono para cambiar el estado del usuarioCONFIRMED
.fuente
--permanent
bandera: stackoverflow.com/a/56948249/3165552Sé que ha pasado un tiempo, pero pensé que esto podría ayudar a otras personas que se encuentren con esta publicación.
Puede utilizar la AWS CLI 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:
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 de 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 ""%
El comando anterior debe 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 un cliente de aplicación configurado con
ADMIN_NO_SRP_AUTH
funcionalidad ( paso 5 en este documento ).fuente
userAttributes.$FIELD_NAME=$VALUE
( github.com/aws/aws-sdk-js/issues/1290 ).--challenge-responses NEW_PASSWORD=password,USERNAME=username,userAttributes.picture=picture,userAttributes.name=name
Esto finalmente se ha agregado 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 user1 --password password --permanent
Antes de usar esto, es posible que deba actualizar su AWS CLI mediante:
pip3 install awscli --upgrade
fuente
Simplemente agregue este código después de su
onSuccess: function (result) { ... },
función de inicio de sesión. Su usuario tendrá entonces el estado CONFIRMADO .fuente
this
de la completa desafío nueva contraseña)Puede cambiar el estado de ese usuario
FORCE_CHANGE_PASSWORD
llamandorespondToAuthChallenge()
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 });
fuente
cognitoidentityserviceprovider.adminInitiateAuth({ AuthFlow: 'ADMIN_NO_SRP_AUTH', ClientId: 'your_own3j63rs8j16bxxxsto25db00obh', UserPoolId: 'us-east-1_DtNSUVT7n', AuthParameters: { USERNAME: 'user3', PASSWORD: 'original_password' } }, callback);
user3
se creó en la consola e inicialmente se le dio la contraseña'original_password'
No estoy seguro de si todavía estás luchando con esto, pero solo para crear un grupo de usuarios de prueba, usé el
awscli
como tal:fuente
ACTUALIZAR:
Ahora estoy usando esto, traducido para amplificar, dentro de un NodeJS Lambda:
Estoy configurando una contraseña temporal y luego la restablezco a la contraseña solicitada por el usuario.
PUESTO ANTIGUO:
Puede resolver esto usando el SDK de amazon-cognito-identity-js autenticándose con la contraseña temporal después de la creación de la cuenta
cognitoidentityserviceprovider.adminCreateUser()
y ejecutándosecognitoUser.completeNewPasswordChallenge()
dentrocognitoUser.authenticateUser( ,{newPasswordRequired})
, todo dentro de la función que crea su usuario.Estoy usando el siguiente código dentro de AWS lambda para crear cuentas de usuario de Cognito habilitadas. Estoy seguro de que se puede optimizar, ten paciencia conmigo. Esta es mi primera publicación y todavía soy bastante nuevo en JavaScript.
fuente
Para Java SDK, asumiendo que su cliente Cognito está configurado y tiene su usuario en el estado FORCE_CHANGE_PASSWORD, puede hacer lo siguiente para que su usuario sea CONFIRMADO ... y luego autenticado como de costumbre.
Espero que ayude con esas pruebas de integración (lo siento por el formato)
fuente
Básicamente, esta es la misma respuesta pero para .Net C # SDK:
Lo siguiente hará una creación de usuario administrador completa con el nombre de usuario y la contraseña deseados. Tener el siguiente modelo de usuario:
Puede crear un usuario y dejarlo listo para usar usando:
fuente
Si está intentando cambiar el estado como administrador desde la consola. Luego, siga los pasos a continuación después de crear el usuario.
paso 2
paso 3 4 5 6
paso 7
paso 8
fuente
Sé que es la misma respuesta, pero pensé que podría ayudar a la
Go
comunidad de desarrolladores. básicamente es iniciar una solicitud de autenticación, obtener la sesión y responder al desafíoNEW_PASSWORD_REQUIRED
Aquí hay una prueba unitaria:
fuente
OKAY. Finalmente tengo un código donde un administrador puede crear un nuevo usuario. El proceso es así:
El paso 1 es la parte difícil. Aquí está mi código para crear un usuario en Node JS:
Básicamente, debe enviar un segundo comando para forzar que el correo electrónico se considere verificado. El usuario aún necesita ir a su correo electrónico para obtener la contraseña temporal (que también verifica el correo electrónico). Pero sin esa segunda llamada que configura el correo electrónico como verificado, no recibirá la llamada correcta para restablecer su contraseña.
fuente