Usando o AWS Cognito, desejo criar usuários fictícios para fins de teste.
Em seguida, uso o console AWS para criar esse usuário, mas o usuário tem seu status definido como FORCE_CHANGE_PASSWORD
. Com esse valor, este usuário não pode ser autenticado.
Existe uma maneira de alterar esse status?
ATUALIZAÇÃO Mesmo comportamento ao criar usuário a partir de CLI
amazon-web-services
aws-cli
amazon-cognito
Dominique Vial
fonte
fonte
Respostas:
Desculpe, você está tendo dificuldades. Não temos um processo de uma etapa em que você pode apenas criar usuários e autenticá-los diretamente. Podemos mudar isso no futuro, para permitir que os administradores definam senhas que podem ser usadas diretamente pelos usuários. Por enquanto, quando você cria usuários usando
AdminCreateUser
ou inscrevendo usuários no aplicativo, etapas extras são necessárias, forçando os usuários a alterar a senha no login ou fazendo com que os usuários verifiquem o e-mail ou número de telefone para alterar o status do usuário paraCONFIRMED
.fonte
--permanent
sinalização: stackoverflow.com/a/56948249/3165552Eu sei que já faz um tempo, mas achei que isso poderia ajudar outras pessoas que encontraram este post.
Você pode usar o AWS CLI para alterar a senha dos usuários, no entanto, é um processo de várias etapas:
Etapa 1: obtenha um token de sessão para o usuário desejado:
Etapa 2: Se a etapa 1 for bem-sucedida, ele responderá com o desafio
NEW_PASSWORD_REQUIRED
, outros parâmetros de desafio e a chave de sessão do usuário. Em seguida, você pode executar o segundo comando para emitir a resposta de desafio: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 ""%
O comando acima deve retornar um Resultado de Autenticação válido e Tokens apropriados.
Importante: Para que isso funcione, o Cognito User Pool DEVE ter um aplicativo cliente configurado com
ADMIN_NO_SRP_AUTH
funcionalidade ( Etapa 5 neste documento ).fonte
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
Finalmente foi adicionado ao AWSCLI: https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/admin-set-user-password.html
Você pode alterar a senha de um usuário e atualizar o status usando:
aws cognito-idp admin-set-user-password --user-pool-id <your user pool id> --username user1 --password password --permanent
Antes de usar isso, você pode precisar atualizar seu AWS CLI usando:
pip3 install awscli --upgrade
fonte
Basta adicionar este código depois de
onSuccess: function (result) { ... },
dentro da função de login. Seu usuário terá então o status CONFIRMADO .fonte
this
no desafio de senha completo)Você pode alterar o status do usuário
FORCE_CHANGE_PASSWORD
chamandorespondToAuthChallenge()
o usuário desta forma: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 });
fonte
cognitoidentityserviceprovider.adminInitiateAuth({ AuthFlow: 'ADMIN_NO_SRP_AUTH', ClientId: 'your_own3j63rs8j16bxxxsto25db00obh', UserPoolId: 'us-east-1_DtNSUVT7n', AuthParameters: { USERNAME: 'user3', PASSWORD: 'original_password' } }, callback);
user3
foi criado no console e inicialmente recebeu a senha'original_password'
não tenho certeza se você ainda está lutando com isso, mas para criar um grupo de usuários de teste apenas, usei o
awscli
como:fonte
Se você estiver tentando alterar o status de administrador no console. Em seguida, siga as etapas abaixo após criar o usuário.
passo 2
passo 3 4 5 6
passo 7
passo 8
fonte
ATUALIZAR:
Houve algumas atualizações e o cliente Amplify não é mais necessário. Depois de adminCreateUser (), você pode apenas usar
[https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminSetUserPassword.html]
isso definirá o usuário como "confirmado".
ATUALIZAR:
Agora estou usando isso, traduzido para amplificar, dentro de um Lambda NodeJS:
Estou definindo uma senha temporária e, em seguida, redefinindo-a com a senha solicitada pelo usuário.
ANTIGA POSTAGEM:
Você pode resolver isso usando o SDK amazon-cognito-identity-js autenticando com a senha temporária após a criação da conta com
cognitoidentityserviceprovider.adminCreateUser()
e executandocognitoUser.completeNewPasswordChallenge()
dentrocognitoUser.authenticateUser( ,{newPasswordRequired})
- tudo dentro da função que cria seu usuário.Estou usando o código abaixo dentro do AWS lambda para criar contas de usuário do Cognito habilitadas. Tenho certeza de que pode ser otimizado, seja paciente comigo. Este é meu primeiro post, e ainda sou muito novo em JavaScript.
fonte
Para Java SDK, supondo que seu cliente Cognito esteja configurado e você tenha seu usuário no estado FORCE_CHANGE_PASSWORD, você pode fazer o seguinte para que seu usuário seja CONFIRMADO ... e então autenticado normalmente.
Espero que ajude com os testes de integração (desculpe a formatação)
fonte
Basicamente, esta é a mesma resposta, mas para .Net C # SDK:
O seguinte fará uma criação completa do usuário admin com o nome de usuário e senha desejados. Tendo o seguinte modelo de usuário:
Você pode criar um usuário e torná-lo pronto para uso usando:
fonte
Eu sei que é a mesma resposta, mas pensei que poderia ajudar a
Go
comunidade de desenvolvedores. basicamente, é iniciar a solicitação de autenticação, obter a sessão e responder ao desafioNEW_PASSWORD_REQUIRED
Aqui está um teste de unidade:
fonte
ESTÁ BEM. Finalmente tenho um código em que um administrador pode criar um novo usuário. O processo é assim:
O passo 1 é a parte difícil. Este é meu código para criar um usuário no Node JS:
Basicamente, você precisa enviar um segundo comando para forçar o e-mail a ser considerado verificado. O usuário ainda precisa acessar seu e-mail para obter a senha temporária (que também verifica o e-mail). Mas sem a segunda chamada que define o e-mail como verificado, você não receberá a chamada certa para redefinir a senha.
fonte