사전 인증 Lambda 트리거 - Amazon Cognito

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

사전 인증 Lambda 트리거

예비 작업을 수행하는 사용자 지정 검증을 생성할 수 있도록 사용자가 로그인을 시도할 때 Amazon Cognito가 이 트리거를 호출합니다. 예를 들어 인증 요청을 거부하거나 세션 데이터를 외부 시스템에 기록할 수 있습니다.

참고

이 Lambda 트리거는 사용자가 존재하지 않거나 사용자 풀에 이미 기존 세션이 있는 경우에는 활성화되지 않습니다. 사용자 풀 앱 클라이언트의 PreventUserExistenceErrors 설정이 ENABLED로 설정된 경우 Lambda 트리거가 활성화됩니다.

인증 흐름 개요

사전 인증 Lambda 트리거 - 클라이언트 흐름

이 요청에는 앱이 사용자 풀 InitiateAuthAdminInitiateAuth API 작업으로 전달하는 ClientMetadata 값의 클라이언트 검증 데이터가 포함됩니다.

자세한 내용은 사용자 풀 인증 흐름 단원을 참조하십시오.

사전 인증 Lambda 트리거 파라미터

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

JSON
{ "request": { "userAttributes": { "string": "string", . . . }, "validationData": { "string": "string", . . . }, "userNotFound": boolean }, "response": {} }

사전 인증 요청 파라미터

userAttributes

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

userNotFound

사용자 풀 클라이언트에 대해 PreventUserExistenceErrorsENABLED로 설정한 경우 Amazon Cognito에서 이 부울을 채웁니다.

validationData

사용자 로그인 요청에 검증 데이터를 포함하는 하나 이상의 키-값 페어입니다. 이 데이터를 Lambda 함수에 전달하려면 InitiateAuthAdminInitiateAuth API 작업의 ClientMetadata 파라미터를 사용합니다.

사전 인증 응답 파라미터

Amazon Cognito는 응답에서 추가 반환 정보를 기대하지 않습니다. 함수는 오류를 반환하여 로그인 시도를 거부하거나 API 작업을 사용하여 리소스를 쿼리하고 수정할 수 있습니다.

사전 인증 예제

이 예제 함수는 사용자가 특정 앱 클라이언트로 사용자 풀에 로그인하지 못하도록 합니다. 사전 인증 Lambda 함수는 사용자에게 기존 세션이 있을 때는 호출하지 않기 때문에 이 함수는 차단하려는 앱 클라이언트 ID가 있는  세션만 방지합니다.

Node.js
const handler = async (event) => { if ( event.callerContext.clientId === "user-pool-app-client-id-to-be-blocked" ) { throw new Error("Cannot authenticate users from this user pool app client"); } return event; }; export { handler };
Python
def lambda_handler(event, context): if event['callerContext']['clientId'] == "<user pool app client id to be blocked>": raise Exception("Cannot authenticate users from this user pool app client") # Return to Amazon Cognito return event

Amazon Cognito는 이벤트 정보를 Lambda 함수에 전달합니다. 그런 다음 함수는 응답이 변경되면 동일한 이벤트 객체를 Amazon Cognito에 반환합니다. Lambda 콘솔에서 해당 Lambda 트리거와 관련 있는 데이터로 테스트 이벤트를 설정할 수 있습니다. 다음은 이 코드 샘플의 테스트 이벤트입니다.

JSON
{ "callerContext": { "clientId": "<user pool app client id to be blocked>" }, "response": {} }