쿠키 기본 설정 선택

당사는 사이트와 서비스를 제공하는 데 필요한 필수 쿠키 및 유사한 도구를 사용합니다. 고객이 사이트를 어떻게 사용하는지 파악하고 개선할 수 있도록 성능 쿠키를 사용해 익명의 통계를 수집합니다. 필수 쿠키는 비활성화할 수 없지만 '사용자 지정' 또는 ‘거부’를 클릭하여 성능 쿠키를 거부할 수 있습니다.

사용자가 동의하는 경우 AWS와 승인된 제3자도 쿠키를 사용하여 유용한 사이트 기능을 제공하고, 사용자의 기본 설정을 기억하고, 관련 광고를 비롯한 관련 콘텐츠를 표시합니다. 필수가 아닌 모든 쿠키를 수락하거나 거부하려면 ‘수락’ 또는 ‘거부’를 클릭하세요. 더 자세한 내용을 선택하려면 ‘사용자 정의’를 클릭하세요.

인증 챌린지 정의 Lambda 트리거

포커스 모드

이 페이지에서

인증 챌린지 정의 Lambda 트리거 - Amazon Cognito

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

인증 챌린지 트리거 정의는 사용자 지정 인증 흐름에서 챌린지 시퀀스를 유지하는 Lambda 함수입니다. 챌린지 시퀀스의 성공 또는 실패를 선언하고 시퀀스가 아직 완료되지 않은 경우 다음 챌린지를 설정합니다.

문제 Lambda 트리거
인증 문제 정의

Amazon Cognito가 이 트리거를 호출하여 사용자 지정 인증 흐름을 시작합니다.

이 Lambda 트리거에 대한 요청에는 session이 포함됩니다. session 파라미터는 현재 인증 프로세스에서 사용자에게 표시되는 모든 문제가 포함된 배열입니다. 해당하는 결과를 포함하는 어레이입니다. session 배열에는 문제 세부 정보(ChallengeResult)가 시간순으로 저장됩니다. 문제 session[0]은 사용자가 수신하는 첫 번째 문제를 나타냅니다.

Amazon Cognito가 사용자 지정 문제를 표시하기 전에 사용자 암호를 확인하도록 할 수 있습니다. 요청 속도 할당량의 인증 범주에 연결된 모든 Lambda 트리거는 사용자 지정 챌린지 흐름에서 SRP 인증을 수행할 때 실행됩니다. 다음은 이 프로세스의 개요입니다.

  1. 앱이 AuthParameters 맵으로 InitiateAuth 또는 AdminInitiateAuth를 호출하여 로그인을 시작합니다. 파라미터에는 CHALLENGE_NAME: SRP_A,와, SRP_AUSERNAME에 대한 값이 포함되어야 합니다.

  2. Amazon Cognito는 challengeName: SRP_AchallengeResult: true를 포함하는 초기 세션과 함께 인증 문제 정의 Lambda 트리거를 호출합니다.

  3. 이러한 입력을 수신한 후 Lambda 함수는 challengeName: PASSWORD_VERIFIER, issueTokens: false, failAuthentication: false로 응답합니다.

  4. 암호 확인이 성공하면 Amazon Cognito가 challengeName: PASSWORD_VERIFIERchallengeResult: true가 포함된 새 세션을 사용하여 Lambda 함수를 다시 호출합니다.

  5. 사용자 지정 문제를 시작하려면 Lambda 함수가 challengeName: CUSTOM_CHALLENGE, issueTokens: falsefailAuthentication: false로 응답합니다. 암호 확인을 사용하여 사용자 지정 인증 흐름을 시작하지 않으려면 CHALLENGE_NAME: CUSTOM_CHALLENGE를 포함한 AuthParameters 맵으로 로그인을 시작하면 됩니다.

  6. 모든 챌린지에 응답할 때까지 챌린지 루프가 반복됩니다.

다음은 SRP 흐름으로 사용자 지정 인증을 수행하는 시작 InitiateAuth 요청의 예입니다.

{ "AuthFlow": "CUSTOM_AUTH", "ClientId": "1example23456789", "AuthParameters": { "CHALLENGE_NAME": "SRP_A", "USERNAME": "testuser", "SRP_A": "[SRP_A]", "SECRET_HASH": "[secret hash]" } }

인증 챌린지 정의 Lambda 트리거 파라미터

Amazon Cognito가 이 Lambda 함수에 전달하는 요청은 아래 파라미터와 Amazon Cognito가 모든 요청에 추가하는 공통 파라미터의 조합입니다.

JSON
{ "request": { "userAttributes": { "string": "string", . . . }, "session": [ ChallengeResult, . . . ], "clientMetadata": { "string": "string", . . . }, "userNotFound": boolean }, "response": { "challengeName": "string", "issueTokens": boolean, "failAuthentication": boolean } }
{ "request": { "userAttributes": { "string": "string", . . . }, "session": [ ChallengeResult, . . . ], "clientMetadata": { "string": "string", . . . }, "userNotFound": boolean }, "response": { "challengeName": "string", "issueTokens": boolean, "failAuthentication": boolean } }

인증 챌린지 정의 요청 파라미터

Amazon Cognito에서 Lambda 함수를 호출하면 Amazon Cognito가 다음과 같은 파라미터를 제공합니다.

userAttributes

사용자 속성을 나타내는 하나 이상의 이름-값 페어입니다.

userNotFound

사용자 풀 클라이언트에 대해 PreventUserExistenceErrorsENABLED로 설정된 경우 Amazon Cognito에서 채우는 부울입니다. 값이 true이면 해당 사용자 ID(사용자 이름, 이메일 주소, 기타 세부 정보)와 일치하는 기존 사용자가 없는 것입니다. PreventUserExistenceErrorsENABLED로 설정된 경우 서비스는 존재하지 않는 사용자를 앱에 알리지 않습니다. Lambda 함수에서 동일한 사용자 경험을 유지하고 대기 시간을 고려하는 것이 좋습니다. 이렇게 하면 호출자가 사용자의 존재 여부에 상관없이 동일한 동작을 감지할 수 있습니다.

세션

ChallengeResult 요소 배열입니다. 각각 다음 요소가 포함됩니다.

challengeName

CUSTOM_CHALLENGE, , SRP_A, PASSWORD_VERIFIER, , SMS_MFA, EMAIL_OTP, DEVICE_SRP_AUTHDEVICE_PASSWORD_VERIFIER, SOFTWARE_TOKEN_MFA또는 챌린지 유형 중 하나입니다ADMIN_NO_SRP_AUTH.

인증 챌린지 정의 함수가 다단계 인증을 설정한 사용자에게 PASSWORD_VERIFIER 챌린지를 발생시키면 Amazon Cognito는 이를 SMS_MFA, EMAIL_OTP또는 SOFTWARE_TOKEN_MFA 챌린지로 후속 조치를 취합니다. 다음은 다중 인증 코드에 대한 프롬프트입니다. 함수에 , SMS_MFA EMAIL_OTPSOFTWARE_TOKEN_MFA 챌린지의 입력 이벤트 처리를 포함합니다. 정의 인증 MFA 챌린지 함수에서 챌린지를 호출할 필요가 없습니다.

중요

사용자가 성공적으로 인증되었고 토큰을 발급받아야 하는지 여부를 함수가 결정할 때 인증 챌린지 정의 함수에서 항상 challengeName을 확인하여 예상 값과 일치하는지 확인해야 합니다.

challengeResult

사용자가 챌린지를 성공적으로 완료하면 true로 설정하고 그렇지 않으면 false로 설정합니다.

challengeMetadata

사용자 지정 챌린지의 이름입니다. challengeNameCUSTOM_CHALLENGE인 경우에만 사용됩니다.

clientMetadata

인증 문제 정의 트리거에 지정하는 Lambda 함수에 사용자 지정 입력으로 제공할 수 있는 하나 이상의 키-값 쌍입니다. 이 데이터를 Lambda 함수에 전달하려면 AdminRespondToAuthChallengeRespondToAuthChallenge API 작업에서 ClientMetadata 파라미터를 사용할 수 있습니다. 정의 인증 챌린지 함수를 호출하는 요청에는 AdminInitiateAuthInitiateAuth API 작업의 ClientMetadata 파라미터에 전달된 데이터가 포함되지 않습니다.

인증 챌린지 정의 응답 파라미터

응답에서 인증 프로세스의 다음 단계를 반환할 수 있습니다.

challengeName

다음 문제의 이름이 포함된 문자열입니다. 사용자에게 새로운 챌린지를 표시하려면 여기에 챌린지 이름을 지정하세요.

issueTokens

사용자가 인증 문제를 충분히 완료했다고 확인한 경우 true로 설정합니다. 사용자가 문제를 충분히 충족하지 못한 경우 false로 설정합니다.

failAuthentication

현재 인증 프로세스를 종료하려는 경우 true로 설정합니다. 현재 인증 프로세스를 계속하려면 false로 설정합니다.

인증 챌린지 정의 예제

이 예에서는 인증을 위한 일련의 문제를 정의하고 사용자가 모든 문제를 성공적으로 완료한 경우에만 토큰을 발행합니다.

Node.js
const handler = async (event) => { if ( event.request.session.length === 1 && event.request.session[0].challengeName === "SRP_A" ) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = "PASSWORD_VERIFIER"; } else if ( event.request.session.length === 2 && event.request.session[1].challengeName === "PASSWORD_VERIFIER" && event.request.session[1].challengeResult === true ) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = "CUSTOM_CHALLENGE"; } else if ( event.request.session.length === 3 && event.request.session[2].challengeName === "CUSTOM_CHALLENGE" && event.request.session[2].challengeResult === true ) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = "CUSTOM_CHALLENGE"; } else if ( event.request.session.length === 4 && event.request.session[3].challengeName === "CUSTOM_CHALLENGE" && event.request.session[3].challengeResult === true ) { event.response.issueTokens = true; event.response.failAuthentication = false; } else { event.response.issueTokens = false; event.response.failAuthentication = true; } return event; }; export { handler };
const handler = async (event) => { if ( event.request.session.length === 1 && event.request.session[0].challengeName === "SRP_A" ) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = "PASSWORD_VERIFIER"; } else if ( event.request.session.length === 2 && event.request.session[1].challengeName === "PASSWORD_VERIFIER" && event.request.session[1].challengeResult === true ) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = "CUSTOM_CHALLENGE"; } else if ( event.request.session.length === 3 && event.request.session[2].challengeName === "CUSTOM_CHALLENGE" && event.request.session[2].challengeResult === true ) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = "CUSTOM_CHALLENGE"; } else if ( event.request.session.length === 4 && event.request.session[3].challengeName === "CUSTOM_CHALLENGE" && event.request.session[3].challengeResult === true ) { event.response.issueTokens = true; event.response.failAuthentication = false; } else { event.response.issueTokens = false; event.response.failAuthentication = true; } return event; }; export { handler };
프라이버시사이트 이용 약관쿠키 기본 설정
© 2025, Amazon Web Services, Inc. 또는 계열사. All rights reserved.