

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

# 인증 챌린지 생성 Lambda 트리거
<a name="user-pool-lambda-create-auth-challenge"></a>

인증 챌린지 생성 트리거는 인증 챌린지 정의 트리거가 선언한 각 챌린지의 세부 정보를 포함하는 Lambda 함수입니다. 인증 챌린지 정의 트리거에서 선언한 챌린지 이름을 처리하고 애플리케이션이 사용자에게 제공해야 하는 `publicChallengeParameters`를 반환합니다. 그런 다음 이 함수는 사용자 풀이 인증 챌린지 확인 트리거에 전달하는 챌린지에 대한 답변(`privateChallengeParameters`)을 사용자 풀에 제공합니다. 인증 챌린지 정의 트리거가 챌린지 시퀀스를 관리하는 경우 인증 챌린지 생성 트리거가 챌린지 콘텐츠를 관리합니다.

![\[문제 Lambda 트리거\]](http://docs.aws.amazon.com/ko_kr/cognito/latest/developerguide/images/lambda-challenges2.png)


**인증 문제 생성**  
**인증 문제 정의** 트리거의 일부로 사용자 지정 문제를 지정한 경우 Amazon Cognito가 **인증 문제 정의** 이후에 이 트리거를 호출합니다. [사용자 지정 인증 흐름](https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-authentication-flow.html#amazon-cognito-user-pools-custom-authentication-flow)을 생성합니다.

사용자에게 표시할 문제를 만들기 위해 이 Lambda 트리거가 호출됩니다. 이 Lambda 트리거에 대한 요청에는 `challengeName` 및 `session`이 포함됩니다. `challengeName`은 문자열이며 사용자에게 표시할 다음 챌린지의 이름입니다. 인증 문제 정의 Lambda 트리거에서 이 속성의 값이 설정됩니다.

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

**Topics**
+ [인증 챌린지 생성 Lambda 트리거 파라미터](#cognito-user-pools-lambda-trigger-syntax-create-auth-challenge)
+ [인증 챌린지 생성 예제](#aws-lambda-triggers-create-auth-challenge-example)

## 인증 챌린지 생성 Lambda 트리거 파라미터
<a name="cognito-user-pools-lambda-trigger-syntax-create-auth-challenge"></a>

Amazon Cognito가 이 Lambda 함수에 전달하는 요청은 아래 파라미터와 Amazon Cognito가 모든 요청에 추가하는 [공통 파라미터](https://docs.aws.amazon.com/cognito/latest/developerguide/cognito-user-pools-working-with-lambda-triggers.html#cognito-user-pools-lambda-trigger-syntax-shared)의 조합입니다.

------
#### [ JSON ]

```
{
    "request": {
        "userAttributes": {
            "string": "string",
            . . .
        },
        "challengeName": "string",
        "session": [
            ChallengeResult,
            . . .
        ],
        "clientMetadata": {
            "string": "string",
            . . .
        },
        "userNotFound": boolean
    },
    "response": {
        "publicChallengeParameters": {
            "string": "string",
            . . .
        },
        "privateChallengeParameters": {
            "string": "string",
            . . .
        },
        "challengeMetadata": "string"
    }
}
```

------

### 인증 챌린지 생성 요청 파라미터
<a name="cognito-user-pools-lambda-trigger-syntax-create-auth-challenge-request"></a>

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

**userNotFound**  
이 부울은 `PreventUserExistenceErrors`가 사용자 풀 클라이언트에 대해 `ENABLED`로 설정된 경우에 채워집니다.

**challengeName**  
새로운 챌린지의 이름입니다.

**세션**  
세션 요소는 각각 다음 요소를 포함하는 `ChallengeResult` 요소의 어레이입니다.    
**challengeName**  
챌린지 유형입니다. `"CUSTOM_CHALLENGE"`, `"PASSWORD_VERIFIER"`, `"SMS_MFA"`, `"DEVICE_SRP_AUTH"`, `"DEVICE_PASSWORD_VERIFIER"`, `"NEW_PASSWORD_REQUIRED"` 또는 `"ADMIN_NO_SRP_AUTH"` 중 하나입니다.  
**challengeResult**  
사용자가 챌린지를 성공적으로 완료하면 `true`로 설정하고 그렇지 않으면 `false`로 설정합니다.  
**challengeMetadata**  
사용자 지정 챌린지의 이름입니다. `challengeName`이 `"CUSTOM_CHALLENGE"`인 경우에만 사용됩니다.

**clientMetadata**  
인증 문제 생성 트리거에 지정하는 Lambda 함수에 사용자 지정 입력으로 제공할 수 있는 하나 이상의 키-값 페어입니다. [AdminRespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminRespondToAuthChallenge.html) 및 [RespondToAuthChallenge](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_RespondToAuthChallenge.html) API 작업에서 ClientMetadata 파라미터를 사용하여 이 데이터를 Lambda 함수에 전달할 수 있습니다. 인증 문제 생성 함수를 호출하는 요청에는 [AdminInitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_AdminInitiateAuth.html) 및 [InitiateAuth](https://docs.aws.amazon.com/cognito-user-identity-pools/latest/APIReference/API_InitiateAuth.html) API 작업의 ClientMetadata 파라미터에 전달된 데이터가 포함되지 않습니다.

### 인증 챌린지 생성 응답 파라미터
<a name="cognito-user-pools-lambda-trigger-syntax-create-auth-challenge-response"></a>

**publicChallengeParameters**  
클라이언트 앱이 사용자에게 표시할 챌린지에 사용하기 위한 하나 이상의 키-값 페어입니다. 사용자에게 문제를 정확히 표시하는 데 필요한 모든 정보를 이 파라미터에 포함해야 합니다.

**privateChallengeParameters**  
이 파라미터는 인증 문제 응답 확인 Lambda 트리거에만 사용됩니다. 챌린지에 대한 사용자의 응답을 확인하는 데 필요한 모든 정보를 이 파라미터에 포함해야 합니다. 즉, `publicChallengeParameters` 파라미터는 사용자에게 표시할 질문을 포함하고 `privateChallengeParameters`는 질문의 유효한 대답을 포함합니다.

**challengeMetadata**  
이 항목이 사용자 지정 챌린지일 경우 사용자 지정 챌린지의 이름입니다.

## 인증 챌린지 생성 예제
<a name="aws-lambda-triggers-create-auth-challenge-example"></a>

이 함수에는 [인증 문제 정의 예제](user-pool-lambda-define-auth-challenge.md#aws-lambda-triggers-define-auth-challenge-example)의 문제 시퀀스에 해당하는 두 가지 사용자 지정 문제가 있습니다. 처음 두 가지 문제는 SRP 인증입니다. 세 번째 문제의 경우 이 함수는 문제 응답에서 애플리케이션에 CAPTCHA URL을 반환합니다. 애플리케이션은 지정된 URL에서 CAPTCHA를 렌더링하고 사용자의 입력을 반환합니다. CAPTCHA 이미지 URL이 퍼블릭 챌린지 파라미터에 "`captchaUrl`"로 추가되고 예상되는 답이 프라이빗 챌린지 파라미터에 추가됩니다.

네 번째 문제의 경우 이 함수는 보안 질문을 반환합니다. 애플리케이션이 질문을 렌더링하고 사용자에게 답변을 요청합니다. 사용자가 두 사용자 지정 문제를 모두 해결한 후 인증 문제 정의 트리거는 사용자 풀이 토큰을 발급할 수 있는지 확인합니다.

------
#### [ Node.js ]

```
const handler = async (event) => {
  if (event.request.challengeName !== "CUSTOM_CHALLENGE") {
    return event;
  }

  if (event.request.session.length === 2) {
    event.response.publicChallengeParameters = {};
    event.response.privateChallengeParameters = {};
    event.response.publicChallengeParameters.captchaUrl = "url/123.jpg";
    event.response.privateChallengeParameters.answer = "5";
  }

  if (event.request.session.length === 3) {
    event.response.publicChallengeParameters = {};
    event.response.privateChallengeParameters = {};
    event.response.publicChallengeParameters.securityQuestion =
      "Who is your favorite team mascot?";
    event.response.privateChallengeParameters.answer = "Peccy";
  }

  return event;
};

export { handler };
```

------