Используя AWS Cognito, я хочу создать фиктивных пользователей для целей тестирования.
Затем я использую Консоль AWS для создания такого пользователя, но у пользователя есть его статус набор для FORCE_CHANGE_PASSWORD
. С этим значением этот пользователь не может быть аутентифицирован.
Есть ли способ изменить этот статус?
ОБНОВЛЕНИЕ Такое же поведение при создании пользователя из CLI
amazon-web-services
aws-cli
amazon-cognito
Доминик Фиал
источник
источник
Ответы:
Извините, у вас возникли трудности. У нас нет одноэтапного процесса, в котором вы можете просто создавать пользователей и напрямую их аутентифицировать. Мы можем изменить это в будущем, чтобы позволить администраторам устанавливать пароли, которые будут напрямую использоваться пользователями. На данный момент, когда вы создаете пользователей с помощью
AdminCreateUser
или путем регистрации пользователей в приложении, требуются дополнительные шаги: либо принуждение пользователей к смене пароля при входе в систему, либо подтверждение пользователями электронной почты или номера телефона для изменения статуса пользователя наCONFIRMED
.источник
--permanent
флаг: stackoverflow.com/a/56948249/3165552Я знаю, что прошло много времени, но подумал, что это может помочь другим людям, которые натолкнулись на этот пост.
Вы можете использовать AWS CLI для изменения пароля пользователя, однако это многоступенчатый процесс:
Шаг 1. Получите токен сеанса для нужного пользователя:
Шаг 2: Если шаг 1 прошел успешно, он ответит запросом
NEW_PASSWORD_REQUIRED
, другими параметрами запроса и ключом сеанса пользователя. Затем вы можете запустить вторую команду, чтобы выдать ответ на запрос: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 ""%
Приведенная выше команда должна возвращать действительный результат аутентификации и соответствующие токены.
Важно: для того, чтобы это работало, пул пользователей Cognito ДОЛЖЕН иметь клиент приложения, настроенный с
ADMIN_NO_SRP_AUTH
функциональными возможностями ( шаг 5 в этом документе ).источник
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
Наконец, это было добавлено в AWSCLI: https://docs.aws.amazon.com/cli/latest/reference/cognito-idp/admin-set-user-password.html
Вы можете изменить пароль пользователя и статус обновления, используя:
aws cognito-idp admin-set-user-password --user-pool-id <your user pool id> --username user1 --password password --permanent
Перед использованием вам может потребоваться обновить интерфейс командной строки AWS, используя:
pip3 install awscli --upgrade
источник
Просто добавьте этот код после вашего
onSuccess: function (result) { ... },
в вашей функции входа в систему. После этого у вашего пользователя будет статус ПОДТВЕРЖДЕН .источник
this
полный вызов нового пароля)Вы можете изменить этот статус пользователя
FORCE_CHANGE_PASSWORD
, вызвавrespondToAuthChallenge()
его следующим образом: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 });
источник
cognitoidentityserviceprovider.adminInitiateAuth({ AuthFlow: 'ADMIN_NO_SRP_AUTH', ClientId: 'your_own3j63rs8j16bxxxsto25db00obh', UserPoolId: 'us-east-1_DtNSUVT7n', AuthParameters: { USERNAME: 'user3', PASSWORD: 'original_password' } }, callback);
user3
был создан в консоли и изначально получил пароль'original_password'
не уверен, что вы все еще боретесь с этим, но для создания группы тестовых пользователей я использовал
awscli
как таковой:источник
ОБНОВИТЬ:
Теперь я использую это, переведенное для усиления, внутри NodeJS Lambda:
Я устанавливаю временный пароль, а затем сбрасываю его на пароль, запрошенный пользователем.
СТАРЫЙ ПОЧТ:
Вы можете решить эту проблему с помощью SDK amazon-cognito-identity-js, аутентифицируясь с временным паролем после создания учетной записи
cognitoidentityserviceprovider.adminCreateUser()
и выполняя ееcognitoUser.completeNewPasswordChallenge()
внутриcognitoUser.authenticateUser( ,{newPasswordRequired})
- все внутри функции, которая создает вашего пользователя.Я использую приведенный ниже код внутри AWS lambda для создания включенных учетных записей пользователей Cognito. Я уверен, что его можно оптимизировать, наберитесь терпения. Это мой первый пост, и я все еще новичок в JavaScript.
источник
Для Java SDK, предполагая, что ваш клиент Cognito настроен и у вас есть пользователь в состоянии FORCE_CHANGE_PASSWORD, вы можете сделать следующее, чтобы получить ПОДТВЕРЖДЕНИЕ вашего пользователя ... и затем авторизоваться как обычно.
Надеюсь, это поможет с этими интеграционными тестами (извините за форматирование)
источник
По сути, это тот же ответ, но для .Net C # SDK:
Следующее приведет к созданию полного администратора с желаемым именем пользователя и паролем. Имея следующую модель пользователя:
Вы можете создать пользователя и подготовить его к использованию, используя:
источник
Если вы пытаетесь изменить статус администратора из консоли. Затем выполните следующие шаги после создания пользователя.
шаг 2
шаг 3 4 5 6
шаг 7
шаг 8
источник
Я знаю, что это тот же ответ, но подумал, что это может помочь
Go
сообществу разработчиков. в основном это инициирует запрос аутентификации, получает сеанс и отвечает на запросNEW_PASSWORD_REQUIRED
Вот модульный тест:
источник
ОК. Наконец-то у меня есть код, в котором администратор может создать нового пользователя. Процесс выглядит так:
Шаг 1 - самая сложная часть. Вот мой код для создания пользователя в Node JS:
По сути, вам нужно отправить вторую команду, чтобы письмо считалось проверенным. Пользователю по-прежнему необходимо перейти на свою электронную почту, чтобы получить временный пароль (который также проверяет электронную почту). Но без этого второго вызова, который устанавливает подтверждение электронной почты, вы не получите ответный звонок для сброса пароля.
источник