사용자 존재 오류 응답 관리
Amazon Cognito는 사용자 풀에서 반환하는 오류 응답을 사용자 지정하도록 지원합니다. 사용자 지정 오류 응답은 사용자 생성, 인증, 암호 복구 및 확인 작업에 사용할 수 있습니다.
사용자 풀 앱 클라이언트의 PreventUserExistenceErrors
설정을 사용하여 사용자 존재 여부와 관련한 오류를 사용하거나 사용하지 않도록 설정합니다. 새 사용자 풀을 생성하면 PreventUserExistenceErrors
는 기본적으로 false
가 됩니다. 이 값이 true
인 경우 Amazon Cognito는 API 요청에 대해 비특정 정보로 응답하며, 그렇지 않으면 유효한 사용자가 존재한다는 사실이 공개될 수 있습니다. Amazon Cognito API에서 UpdateUserPoolClient 요청으로 이 값을 업데이트합니다. AWS Management Console에서 앱 클라이언트를 만들거나 편집하여 사용자 존재 오류 방지를 활성화합니다.
사용자 풀에서 사용자 존재 오류를 방지하면 Amazon Cognito 로그인 및 암호 찾기 API가 일반 인증 실패 응답을 반환합니다. 이 오류 응답은 사용자 이름 또는 암호가 잘못되었음을 나타냅니다. Amazon Cognito 계정 확인 및 암호 복구 API가 시뮬레이션된 전송 미디어에 코드가 전송되었음을 나타내는 응답을 반환합니다. 이 오류 응답은 상태가 ENABLED
이고 사용자가 존재하지 않을 때 작동합니다. 다음은 PreventUserExistenceErrors
가 ENABLED
로 설정된 경우 Amazon Cognito 작업의 자세한 동작입니다.
사용자 생성 및 인증 작업
다음 작업을 이용해 사용자 이름 암호 인증 또는 Secure Remote Password(SRP) 인증을 사용할 수 있습니다. 사용자 지정 인증을 통해 반환되는 오류를 사용자 지정할 수도 있습니다.
-
AdminInitiateAuth
-
AdminRespondToAuthChallenge
-
InitiateAuth
-
RespondToAuthChallenge
다음 목록은 사용자 인증 작업에서 오류 응답을 사용자 지정하는 방법을 보여줍니다.
- 사용자 이름 및 암호 인증
-
ADMIN_USER_PASSWORD_AUTH
및USER_PASSWORD_AUTH
를 사용하여 사용자를 로그인하려면AdminInitiateAuth
또는InitiateAuth
API 요청에 사용자 이름과 암호를 포함해야 합니다. 사용자 이름 또는 암호가 올바르지 않으면 Amazon Cognito는 일반NotAuthorizedException
오류를 반환합니다. - Secure Remote Password(SRP) 기반 인증
-
USER_SRP_AUTH
를 사용하려 사용자를 로그인하려면 사용자 이름과SRP_A
파라미터를AdminInitiateAuth
또는InitiateAuth
API 요청에 포함해야 합니다. 이에 대한 응답에서 Amazon Cognito는 SRP 표준에 따라 사용자에게SRP_B
와 솔트를 반환합니다. 사용자를 찾을 수 없는 경우 Amazon Cognito가 RFC 5054에 설명된 대로 첫 번째 단계에서 시뮬레이션된 응답을 반환합니다. Amazon Cognito가 동일한 사용자 이름 및 사용자 풀 조합에 대해 동일한 솔트와 내부 사용자 ID(Universally Unique Identifier(UUID) 형식)를 반환합니다. RespondToAuthChallenge
요청을 암호 증명과 함께 보내면, Amazon Cognito는 사용자 이름 또는 암호가 올바르지 않을 때 일반NotAuthorizedException
오류를 반환합니다.참고
검증 기반 별칭 속성을 사용하고 있으며 변경 불가능한 사용자 이름의 형식이 UUID로 지정되지 않았다면, 사용자 이름 및 암호 인증을 사용하여 일반 응답을 시뮬레이션할 수 있습니다.
- 사용자 지정 인증 문제 Lambda 트리거
-
사용자 지정 인증 문제 Lambda 트리거를 사용하고 오류 응답을 사용하는 경우
LambdaChallenge
는UserNotFound
라는 부울 파라미터를 반환합니다. 이 파라미터는DefineAuthChallenge
,VerifyAuthChallenge
및CreateAuthChallenge
Lambda 트리거의 요청에 전달됩니다. 이 트리거를 사용하여 존재하지 않는 사용자에 대해 사용자 지정 권한 부여 문제를 시뮬레이션할 수 있습니다. 존재하지 않는 사용자에 대해 사전 인증 Lambda 트리거를 호출하면 Amazon Cognito가UserNotFound
를 반환합니다.
다음 목록은 사용자 생성 작업에서 오류 응답을 사용자 지정하는 방법을 보여줍니다.
- SignUp
-
SignUp
작업은 이미 사용 중인 사용자 이름인 경우UsernameExistsException
을 반환합니다. 앱에서 사용자를 등록할 때 Amazon Cognito가 이메일 주소 및 전화번호에 대한UsernameExistsException
오류를 반환하지 않게 하려면, 확인 기반 별칭 속성을 사용해야 합니다. 별칭에 대한 자세한 내용은 사용자 풀 속성의 로그인 특성 사용자 지정 섹션을 참조하세요.Amazon Cognito가
SignUp
API 요청을 사용하여 사용자 풀에서 사용자를 검색하지 못하게 하는 예시는 가입 시 이메일 주소 및 전화 번호 관련 UsernameExistsException 오류 방지에서 확인할 수 있습니다. - 가져온 사용자
-
PreventUserExistenceErrors
를 사용하는 경우 가져온 사용자를 인증하는 중에PasswordResetRequiredException
이 반환되지 않고 대신 사용자 이름 또는 암호가 잘못되었음을 나타내는 일반NotAuthorizedException
오류가 반환됩니다. 자세한 내용은 가져온 사용자에게 암호 재설정 요구를 참조하세요. - 사용자 마이그레이션 Lambda 트리거
-
Amazon Cognito는 Lambda 트리거에서 원래 이벤트 컨텍스트에 빈 응답이 설정된 경우 존재하지 않는 사용자에 대해 시뮬레이션된 응답을 반환합니다. 자세한 내용은 사용자 마이그레이션 Lambda 트리거를 참조하세요.
가입 시 이메일 주소 및 전화 번호 관련 UsernameExistsException
오류 방지
다음 예제는 사용자 풀에서 별칭 속성을 구성할 때 중복된 이메일 주소와 전화번호 때문에 SignUp
API 요청에 대한 응답으로 UsernameExistsException
오류가 생성되지 않게 하는 방법을 보여줍니다. 이메일 주소나 전화 번호를 별칭 속성으로 사용하여 사용자 풀을 생성해야 합니다. 자세한 내용은 사용자 풀 속성의 로그인 특성 사용자 지정 섹션을 참조하세요.
-
Jie는 새 사용자 이름을 등록하고 이메일 주소(
jie@example.com
)도 입력합니다. Amazon Cognito가 이 이메일 주소로 확인 코드를 전송합니다.AWS CLI 명령 예
aws cognito-idp sign-up --client-id 1234567890abcdef0 --username jie --password PASSWORD --user-attributes Name="email",Value="jie@example.com"
응답의 예
{ "UserConfirmed": false, "UserSub": "
<subId>
", "CodeDeliveryDetails": { "AttributeName": "email", "Destination": "j****@e****", "DeliveryMedium": "EMAIL" } } -
Jie는 전송된 코드를 입력하여 이메일 주소의 소유권을 확인합니다. 이로써 사용자 등록이 완료됩니다.
AWS CLI 명령 예
aws cognito-idp confirm-sign-up --client-id 1234567890abcdef0 --username=jie --confirmation-code xxxxxx
-
Shirley는 새 사용자 계정을 등록하고 이메일 주소(
jie@example.com
)를 입력합니다. Amazon Cognito는UsernameExistsException
오류를 반환하지 않고, Jie의 이메일 주소로 확인 코드를 보냅니다.AWS CLI 명령 예
aws cognito-idp sign-up --client-id 1234567890abcdef0 --username shirley --password PASSWORD --user-attributes Name="email",Value="jie@example.com"
응답의 예
{ "UserConfirmed": false, "UserSub": "
<new subId>
", "CodeDeliveryDetails": { "AttributeName": "email", "Destination": "j****@e****", "DeliveryMedium": "EMAIL" } } -
다른 시나리오에서는 Shirley 가
jie@example.com
에 대한 소유권을 가집니다. 셜리는 Amazon Cognito가 Jie의 이메일 주소로 보낸 코드를 검색하고 계정 확인을 시도합니다.AWS CLI 명령 예
aws cognito-idp confirm-sign-up --client-id 1234567890abcdef0 --username=shirley --confirmation-code xxxxxx
응답의 예
An error occurred (AliasExistsException) when calling the ConfirmSignUp operation: An account with the email already exists.
jie@example.com
이 기존 사용자에게 할당되었지만 Amazon Cognito는 Shirley의 aws cognito-idp sign-up
요청에 대해 오류를 반환하지 않습니다. Shirley는 Amazon Cognito가 오류 응답을 반환하기 전에 이메일 주소의 소유권을 입증해야 합니다. 별칭 속성이 있는 사용자 풀에서는 이 동작 때문에, 지정된 이메일 주소나 전화 번호를 가진 사용자의 존재 여부를 공개 SignUp
API로 확인할 수 없습니다.
이 동작은 다음 예에서처럼 Amazon Cognito가 기존 사용자 이름과 함께 SignUp
요청에 반환하는 응답과는 다릅니다. Shirley는 이 응답을 통해 사용자 이름이 jie
인 사용자가 이미 존재함을 알게 되지만, 이 사용자와 관련된 이메일 주소나 전화번호는 알지 못합니다.
CLI 명령 예
aws cognito-idp sign-up --client-id 1example23456789 --username jie --password PASSWORD --user-attributes Name="email",Value="shirley@example.com"
응답의 예
An error occurred (UsernameExistsException) when calling the SignUp operation: User already exists
암호 재설정 작업
Amazon Cognito는 사용자 존재 오류를 방지하면 사용자 암호 재설정 작업에 다음과 같은 응답을 반환합니다.
- ForgotPassword
-
사용자를 찾을 수 없거나, 사용자가 비활성화되었거나, 암호를 복구할 수 있는 확인된 전달 메커니즘이 없는 경우 Amazon Cognito는 사용자에 대해 시뮬레이션된 전송 미디어와 함께
CodeDeliveryDetails
를 반환합니다. 시뮬레이션된 전송 미디어는 사용자 풀의 입력 사용자 이름 형식 및 검증 설정에 따라 결정됩니다. - ConfirmForgotPassword
-
Amazon Cognito는 존재하지 않거나 사용 중지된 사용자에 대해
CodeMismatchException
오류를 반환합니다.ForgotPassword
를 사용할 때 코드가 요청되지 않은 경우 Amazon Cognito가ExpiredCodeException
오류를 반환합니다.
확인 작업
Amazon Cognito는 사용자 존재 오류를 방지하는 경우 사용자 확인 및 검증 작업에 다음과 같은 응답을 반환합니다.
- ResendConfirmationCode
-
Amazon Cognito는 사용 중지되거나 존재하지 않는 사용자에 대해
CodeDeliveryDetails
오류를 반환합니다. Amazon Cognito는 기존 사용자의 이메일 또는 전화 번호로 확인 코드를 보냅니다. - ConfirmSignUp
-
ExpiredCodeException
은 코드가 만료된 경우 반환됩니다. Amazon Cognito는 사용자에게 권한이 부여되지 않은 경우NotAuthorizedException
을 반환합니다. 서버에서 예상하는 코드와 일치하지 않는 경우 Amazon Cognito는CodeMismatchException
을 반환합니다.