AWS Cognito를 사용하여 테스트 목적으로 더미 사용자를 만들고 싶습니다.
그런 다음 AWS 콘솔 을 사용하여 이러한 사용자를 생성하지만 사용자의 상태는로 설정됩니다 FORCE_CHANGE_PASSWORD
. 이 값을 사용하면이 사용자를 인증 할 수 없습니다.
이 상태를 변경할 수있는 방법이 있습니까?
UPDATE CLI에서 사용자 생성시 동일한 동작
답변
불편을 드려 죄송합니다. 사용자를 생성하고 직접 인증 할 수있는 1 단계 프로세스가 없습니다. 관리자가 사용자가 직접 사용할 수있는 암호를 설정할 수 있도록 향후이를 변경할 수 있습니다. 현재로서는 AdminCreateUser
앱을 사용 하거나 사용자를 등록하여 사용자를 생성 할 때 사용자 가 로그인 할 때 비밀번호를 변경하도록하거나 사용자가 이메일 또는 전화 번호를 확인하여 사용자 상태를로 변경하도록하는 추가 단계가 필요합니다 CONFIRMED
.
답변
오랜만이라는 것을 알고 있지만 이것이이 게시물을 보는 다른 사람들에게 도움이 될 것이라고 생각했습니다.
AWS CLI를 사용하여 사용자 암호를 변경할 수 있지만 이는 다단계 프로세스입니다.
1 단계 : 원하는 사용자에 대한 세션 토큰을 가져옵니다.
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%
오류에 대한이 반환하는 경우
Unable to verify secret hash for client
, 비밀 않고 다른 응용 프로그램 클라이언트를 생성 하고 클라이언트 ID를 사용합니다.
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 ""%
Invalid attributes given, XXX is missing
형식을 사용하여 누락 된 속성 전달에 대한 오류가 발생하는 경우userAttributes.$FIELD_NAME=$VALUE
위의 명령은 유효한 인증 결과와 적절한 토큰을 반환해야합니다.
중요 : 이 기능이 작동하려면 Cognito 사용자 풀 에 기능이 구성된 앱 클라이언트 가 있어야 ADMIN_NO_SRP_AUTH
합니다 ( 이 문서의 5 단계 ).
답변
이것은 마침내 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 CLI를 업데이트해야 할 수 있습니다.
pip3 install awscli --upgrade
답변
onSuccess: function (result) { ... },
로그인 기능 내 에서이 코드를 추가하십시오 . 그러면 사용자는 CONFIRMED 상태가됩니다 .
newPasswordRequired: function(userAttributes, requiredAttributes) {
// User was signed up by an admin and must provide new
// password and required attributes, if any, to complete
// authentication.
// the api doesn't accept this field back
delete userAttributes.email_verified;
// unsure about this field, but I don't send this back
delete userAttributes.phone_number_verified;
// Get these details and call
cognitoUser.completeNewPasswordChallenge(newPassword, userAttributes, 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
});
그런 다음 콘솔에
user3
상태가CONFIRMED
.
답변
여전히 이것으로 싸우고 있는지 확실하지 않지만 테스트 사용자를 만들기 위해서만 다음 awscli
과 같이 사용했습니다 .
- cognito-idp에서 sign-up 하위 명령을 사용하여 사용자를 만듭니다.
aws cognito-idp sign-up \
--region %aws_project_region% \
--client-id %aws_user_pools_web_client_id% \
--username %email_address% \
--password %password% \
--user-attributes Name=email,Value=%email_address%
- admin-confirm-sign-up을 사용하여 사용자 확인
aws cognito-idp admin-confirm-sign-up \
--user-pool-id %aws_user_pools_web_client_id% \
--username %email_address%
답변
콘솔에서 관리자로 상태를 변경하려는 경우. 그런 다음 사용자를 만든 후 아래 단계를 따릅니다.
- Cognito에서 이동-> “사용자 풀 관리”->
- 앱 통합 섹션에서 “앱 클라이언트 설정”으로 이동합니다.
- 아래 항목을 확인하십시오 .i) Cognito 사용자 풀 ii) 인증 코드 부여 iii) 암시 적 부여 iv) 전화 v) 이메일 vi) openid vii) aws.cognito.signin.user.admin viii) 프로필
- 애플리케이션의 콜백 URL을 입력하십시오. 예를 들어 https://google.com을 입력했는지 확실하지 않은 경우 나중에 실제 콜백 URL로 변경할 수 있습니다.
- 변경 사항 저장을 클릭하십시오.
- 변경 사항이 저장되면 “호스팅 된 UI 시작”링크를 클릭합니다.
- 새로 생성 된 사용자의 자격 증명을 입력합니다.
- 새 자격 증명으로 암호를 재설정하고 사용자와 동일하게 공유하십시오.