
Lambda Authorizer코드는 깃허브 저장소에서 확인할 수 있습니다.
Lambda 권한 부여자(이전 사용자 지정 권한 부여자)는 Lambda 함수를 사용하여 API 메서드에 대한 액세스를 제어하는 API Gateway 기능입니다.
Lambda 권한 부여자는 두 가지 유형이 있습니다.
토큰 기반 Lambda 권한 부여자(TOKEN 권한 부여자라고도 함)는 보유자 토큰(JSON Web Token(JWT) 또는 OAuth 토큰)에 있는 호출자의 자격 증명을 받습니다. 예제 애플리케이션은 GitHub의 Open Banking Brazil - Authorization Samples를 참조하십시오.
요청 파라미터 기반 Lambda 권한 부여자(REQUEST 권한 부여자라고도 함)는 헤더, 쿼리 문자열 파라미터, stageVariables 및 $context 변수의 조합으로 호출자의 자격 증명을 수신합니다.
WebSocket API의 경우 요청 파라미터 기반 유형 권한 부여자만 지원됩니다.
서비스하고자 하는 애플리케이션의 JWT를 비롯한 다양한 verify 기능을 API-Gateway에서 처리함으로서 인증 서버에서 처리함으로서 매번 요청에 대해 서버가 인증을 거치지 않아 최소한의 비용으로 인증 기능을 이용할 수 있습니다.
verify 역할을 담당하는 Lambda 함수를 생성합니다.
이 블로그에서는 Javascript를 이용하여 함수를 생성합니다.
jwt verify에 필요한 jsonwebtoken 의존성 모듈을 배포하기 위해 serverless framework을 사용하여 로컬의 lambda 함수를 aws 서비스로 배포합니다.
event.headers.authorization의 값을 type과 token으로 분류하여 저장합니다. API가 메서드 요청을 받을 때 API Gateway가 소스 토큰을 이 Lambda 권한 부여자 함수의 event.headers.authorization 속성에 전달합니다. Lambda 권한 부여자 함수는 토큰을 읽고 다음과 같이 동작합니다.
'allow'인 경우 권한 부여자 함수는 200 OK HTTP 응답 및 다음과 같은 IAM 정책을 반환하고 메서드 요청이 성공합니다.
{
"Version": "2012-10-17",
"Statement": [{
"Action": "execute-api:Invoke",
"Effect": "Allow",
"Resource": "arn:aws:execute-api:us-east-1:123456789012:ivdtdhp7b5/ESTestInvoke-stage/GET/"
}
]
}'deny'인 경우 권한 부여자 함수는 403 Forbidden HTTP 응답 및 다음과 같은 Deny IAM 정책을 반환하고 메서드 요청이 실패합니다.
{
"Version": "2012-10-17",
"Statement": [{
"Action": "execute-api:Invoke",
"Effect": "Deny",
"Resource": "arn:aws:execute-api:us-east-1:123456789012:ivdtdhp7b5/ESTestInvoke-stage/GET/"
}
]
}'unauthorized'이나 빈 문자열인 경우 권한 부여자 함수는 401 Unauthorized HTTP 응답을 반환하고 메서드 호출이 실패합니다.500 Invalid token 응답을 수신하고, 메서드 호출은 실패합니다.