기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
사용자 정의 인증 챌린지 Lambda 트리거
Amazon Cognito 사용자 풀에 대한 인증 흐름을 구축할 때 기본 제공 흐름 이상으로 인증 모델을 확장하고 싶을 수 있습니다. 사용자 지정 챌린지 트리거의 일반적인 사용 사례 중 하나는 사용자 이름, 암호 및 다중 인증(MFA) 이외의 추가 보안 검사를 구현하는 것입니다. 사용자 지정 챌린지는 Lambda 지원 프로그래밍 언어로 생성할 수 있는 모든 질문과 응답입니다. 예를 들어 인증이 허용되기 전에 사용자가 CAPTCHA를 해결하거나 보안 질문에 답하도록 요구할 수 있습니다. 또 다른 잠재적 요구 사항은 특수 인증 요소 또는 디바이스와 통합하는 것입니다. 또는 하드웨어 보안 키 또는 생체 인식 장치로 사용자를 인증하는 소프트웨어를 이미 개발했을 수도 있습니다. 사용자 지정 챌린지에 대한 인증 성공의 정의는 Lambda 함수가 올바른 것으로 받아들이는 답변(예: 고정 문자열 또는 외부 API의 만족스러운 응답)입니다.
사용자 지정 챌린지로 인증을 시작하고 인증 프로세스를 완전히 제어하거나 애플리케이션이 사용자 지정 챌린지를 수신하기 전에 사용자 이름 암호 인증을 수행할 수 있습니다.
사용자 지정 인증 챌린지 Lambda 트리거:
이 세 가지 Lambda 함수는 서로 연결되어 사용자의 제어 범위 내에 있고 자체 설계에 완전히 속하는 인증 메커니즘을 제공합니다. 사용자 지정 인증에는 클라이언트 및 Lambda 함수에 애플리케이션 로직이 필요하므로 관리형 로그인 내에서 사용자 지정 인증을 처리할 수 없습니다. 이 인증 시스템에는 추가 개발자 노력이 필요합니다. 애플리케이션은 사용자 풀 API로 인증 흐름을 수행하고 사용자 지정 인증 챌린지의 중앙에서 질문을 렌더링하는 사용자 지정 로그인 인터페이스를 사용하여 결과 챌린지를 처리해야 합니다.

사용자 지정 인증을 구현하는 방법에 대한 자세한 내용은 사용자 지정 인증 흐름 및 챌린지 섹션을 참조하세요.
API 작업 InitiateAuth 또는 AdminInitiateAuth와 RespondToAuthChallenge 또는 AdminRespondToAuthChallenge 간의 인증. 이 흐름에서 인증이 실패하거나 사용자에게 토큰이 발행될 때까지 사용자는 연속 문제에 응답하여 인증합니다. 챌린지 응답은 새로운 챌린지일 수 있습니다. 이 경우 애플리케이션은 새로운 챌린지에 필요한 만큼 응답합니다. 인증 챌린지 정의 함수가 지금까지의 결과를 분석하여 모든 챌린지에 응답했다고 판단하고 IssueTokens
를 반환하면 인증이 성공합니다.
사용자 지정 챌린지 흐름의 SRP 인증
Amazon Cognito가 사용자 지정 문제를 표시하기 전에 사용자 암호를 확인하도록 할 수 있습니다. request-rate 할당량의 인증 카테고리에 연결된 Lambda 트리거는 사용자 지정 문제 흐름에서 SRP 인증을 수행할 때 실행됩니다. 다음은 이 프로세스의 개요입니다.
-
앱이
AuthParameters
맵으로InitiateAuth
또는AdminInitiateAuth
를 호출하여 로그인을 시작합니다. 파라미터에는CHALLENGE_NAME: SRP_A,
와,SRP_A
및USERNAME
에 대한 값이 포함되어야 합니다. -
Amazon Cognito는
challengeName: SRP_A
및challengeResult: true
를 포함하는 초기 세션과 함께 인증 문제 정의 Lambda 트리거를 호출합니다. -
이러한 입력을 수신한 후 Lambda 함수는
challengeName: PASSWORD_VERIFIER
,issueTokens: false
,failAuthentication: false
로 응답합니다. -
암호 확인이 성공하면 Amazon Cognito가
challengeName: PASSWORD_VERIFIER
및challengeResult: true
가 포함된 새 세션을 사용하여 Lambda 함수를 다시 호출합니다. -
사용자 지정 문제를 시작하려면 Lambda 함수가
challengeName: CUSTOM_CHALLENGE
,issueTokens: false
및failAuthentication: false
로 응답합니다. 암호 확인을 사용하여 사용자 지정 인증 흐름을 시작하지 않으려면CHALLENGE_NAME: CUSTOM_CHALLENGE
를 포함한AuthParameters
맵으로 로그인을 시작하면 됩니다. -
모든 챌린지에 응답할 때까지 챌린지 루프가 반복됩니다.
다음은 SRP 흐름을 사용하여 사용자 지정 인증에 앞서 시작되는 InitiateAuth
요청의 예입니다.
{ "AuthFlow": "CUSTOM_AUTH", "ClientId": "1example23456789", "AuthParameters": { "CHALLENGE_NAME": "SRP_A", "USERNAME": "testuser", "SRP_A": "[SRP_A]", "SECRET_HASH": "[secret hash]" } }
사용자 지정 인증 SRP 흐름의 암호 재설정
사용자가 FORCE_CHANGE_PASSWORD
상태인 경우 사용자 지정 인증 흐름은 인증 문제의 무결성을 유지하면서 암호 변경 단계를 통합해야 합니다. Amazon Cognito는 챌린지 중에 인증 NEW_PASSWORD_REQUIRED
챌린지 정의 Lambda 트리거를 호출합니다. 이 시나리오에서는 사용자 지정 챌린지 흐름 및 SRP 인증으로 로그인하는 사용자가 암호 재설정 상태인 경우 새 암호를 설정할 수 있습니다.
사용자가 RESET_REQUIRED
또는 FORCE_CHANGE_PASSWORD
상태인 경우를 사용하여 NEW_PASSWORD_REQUIRED
챌린지에 응답해야 합니다NEW_PASSWORD
. SRP를 사용한 사용자 지정 인증에서 Amazon Cognito는 사용자가 SRP NEW_PASSWORD_REQUIRED
챌린지를 완료한 후 PASSWORD_VERIFIER
챌린지를 반환합니다. 인증 챌린지 정의 트리거는 session
배열에서 두 챌린지 결과를 모두 수신하며 사용자가 암호를 성공적으로 변경한 후 추가 사용자 지정 챌린지를 진행할 수 있습니다.
인증 챌린지 정의 Lambda 트리거는 SRP 인증, 암호 재설정 및 후속 사용자 지정 챌린지를 통해 챌린지 시퀀스를 관리해야 합니다. 트리거는 PASSWORD_VERIFIER
및 NEW_PASSWORD_REQUIRED
결과를 포함하여 session
파라미터에서 완료된 챌린지 배열을 수신합니다. 구현 예제는 단원을 참조하십시오인증 챌린지 정의 예제.
인증 흐름 단계
사용자 지정 챌린지 전에 암호를 확인해야 하는 사용자의 경우 프로세스는 다음 단계를 따릅니다.
-
앱이
AuthParameters
맵으로InitiateAuth
또는AdminInitiateAuth
를 호출하여 로그인을 시작합니다. 파라미터에는CHALLENGE_NAME: SRP_A
, 및SRP_A
값이 포함되어야 합니다USERNAME
. -
Amazon Cognito는
challengeName: SRP_A
및challengeResult: true
를 포함하는 초기 세션과 함께 인증 문제 정의 Lambda 트리거를 호출합니다. -
이러한 입력을 수신한 후 Lambda 함수는
challengeName: PASSWORD_VERIFIER
,issueTokens: false
,failAuthentication: false
로 응답합니다. -
암호 확인에 성공하면 다음 두 가지 중 하나가 발생합니다.
- 정상 상태인 사용자의 경우:
-
Amazon Cognito는
challengeName: PASSWORD_VERIFIER
및가 포함된 새 세션을 사용하여 Lambda 함수를 다시 호출합니다challengeResult: true
.사용자 지정 문제를 시작하려면 Lambda 함수가
challengeName: CUSTOM_CHALLENGE
,issueTokens: false
및failAuthentication: false
로 응답합니다. RESET_REQUIRED
또는FORCE_CHANGE_PASSWORD
상태의 사용자의 경우:-
Amazon Cognito는
challengeName: PASSWORD_VERIFIER
및가 포함된 세션을 사용하여 Lambda 함수를 호출합니다challengeResult: true
.Lambda 함수는
challengeName: NEW_PASSWORD_REQUIRED
,issueTokens: false
,failAuthentication: false
와 함께 응답해야 합니다.암호 변경에 성공하면 Amazon Cognito는
PASSWORD_VERIFIER
및NEW_PASSWORD_REQUIRED
결과를 모두 포함하는 세션으로 Lambda 함수를 호출합니다.사용자 지정 문제를 시작하려면 Lambda 함수가
challengeName: CUSTOM_CHALLENGE
,issueTokens: false
및failAuthentication: false
로 응답합니다.
-
모든 챌린지에 응답할 때까지 챌린지 루프가 반복됩니다.
암호 확인을 사용하여 사용자 지정 인증 흐름을 시작하지 않으려면 CHALLENGE_NAME: CUSTOM_CHALLENGE
를 포함한 AuthParameters
맵으로 로그인을 시작하면 됩니다.
세션 관리
인증 흐름은 일련의 세션 IDs 및 챌린지 결과를 통해 세션 연속성을 유지합니다. 각 챌린지 응답은 세션 재사용 오류를 방지하기 위해 새 세션 ID를 생성합니다. 이는 다중 인증 흐름에 특히 중요합니다.
챌린지 결과는 Lambda 트리거가 수신하는 세션 배열에 시간순으로 저장됩니다. FORCE_CHANGE_PASSWORD
상태인 사용자의 경우 세션 배열에는 다음이 포함됩니다.
session[0]
- 초기SRP_A
챌린지session[1]
-PASSWORD_VERIFIER
결과session[2]
-NEW_PASSWORD_REQUIRED
결과후속 요소 - 추가 사용자 지정 챌린지의 결과
인증 흐름의 예
다음 예제에서는 암호 변경과 사용자 지정 CAPTCHA 챌린지를 모두 완료해야 하는 FORCE_CHANGE_PASSWORD
상태의 사용자에 대한 전체 사용자 지정 인증 흐름을 보여줍니다.
-
InitiateAuth 요청
{ "AuthFlow": "CUSTOM_AUTH", "ClientId": "
1example23456789
", "AuthParameters": { "CHALLENGE_NAME": "SRP_A", "USERNAME": "testuser
", "SRP_A": "[SRP_A]
" } } -
InitiateAuth 응답
{ "ChallengeName": "PASSWORD_VERIFIER", "ChallengeParameters": { "USER_ID_FOR_SRP": "
testuser
" }, "Session": "[session_id_1]
" } -
를 사용한 RespondToAuthChallenge 요청
PASSWORD_VERIFIER
{ "ChallengeName": "PASSWORD_VERIFIER", "ClientId": "
1example23456789
", "ChallengeResponses": { "PASSWORD_CLAIM_SIGNATURE": "[claim_signature]
", "PASSWORD_CLAIM_SECRET_BLOCK": "[secret_block]
", "TIMESTAMP": "[timestamp]
", "USERNAME": "testuser
" }, "Session": "[session_id_1]
" } -
NEW_PASSWORD_REQUIRED
챌린지가 포함된 RespondToAuthChallenge 응답{ "ChallengeName": "NEW_PASSWORD_REQUIRED", "ChallengeParameters": {}, "Session": "
[session_id_2]
" } -
를 사용한 RespondToAuthChallenge 요청
NEW_PASSWORD_REQUIRED
{ "ChallengeName": "NEW_PASSWORD_REQUIRED", "ClientId": "
1example23456789
", "ChallengeResponses": { "NEW_PASSWORD": "[password]
", "USERNAME": "testuser
" }, "Session": "[session_id_2]
" } -
CAPTCHA 사용자 지정 챌린지를 사용한 RespondToAuthChallenge 응답
{ "ChallengeName": "CUSTOM_CHALLENGE", "ChallengeParameters": { "captchaUrl": "url/123.jpg" }, "Session": "
[session_id_3]
" } -
CAPTCHA 사용자 지정 챌린지에 대한 답변이 포함된 RespondToAuthChallenge 요청
{ "ChallengeName": "CUSTOM_CHALLENGE", "ClientId": "
1example23456789
", "ChallengeResponses": { "ANSWER": "123
", "USERNAME": "testuser
" }, "Session": "[session_id_3]
" }
6. 최종 성공 응답
{ "AuthenticationResult": { "AccessToken": "
eyJra456defEXAMPLE
", "ExpiresIn": 3600, "IdToken": "eyJra789ghiEXAMPLE
", "RefreshToken": "eyJjd123abcEXAMPLE
", "TokenType": "Bearer" }, "ChallengeParameters": {} }