› 기술문서 › 인증·인가 흐름

인증 · 인가 흐름

Amazon Cognito User Pool로 사용자를 인증하고, API Gateway가 JWT를 검증한 뒤 Lambda가 토큰 클레임으로 데이터 접근 범위를 제한하는 과정을 설명합니다.

Amazon Cognito JWT (RS256) API Gateway Authorizer

1. 인증과 인가의 분리

두 개념을 서로 다른 계층에서 처리해, 애플리케이션 코드가 토큰 검증 로직을 갖지 않도록 설계했습니다.

Authentication

인증 — 너는 누구인가

Cognito User Pool이 담당합니다. 이메일·비밀번호를 검증하고 서명된 JWT를 발급합니다. 비밀번호는 Cognito가 관리하므로 앱과 서버는 비밀번호를 저장하지 않습니다.

Authorization

인가 — 무엇을 할 수 있는가

API Gateway가 토큰 서명·만료를 검증하고, Lambda가 클레임의 sub(userId)로 본인 데이터만 접근하도록 범위를 제한합니다.

2. 전체 흐름 다이어그램

📱 App 클라이언트 🔑 Cognito User Pool 🚪 API Gateway JWT Authorizer λ Lambda userId 기반 인가 ① 로그인 (email / 비밀번호) ② ID · Access · Refresh 토큰 발급 ③ API 호출 — Authorization: Bearer <AccessToken> ④ 서명 · 만료 검증 (JWKS 공개키) ⑤ 검증 통과 → claims(sub=userId) 전달 ⑥ 인가 (Authorization) Lambda는 event.requestContext.authorizer.jwt.claims.sub 로 사용자를 식별하고, 해당 사용자 스코프의 데이터만 접근을 허용합니다. Access Token 만료 시 Refresh Token으로 재발급받아 재로그인 없이 이어서 사용합니다.
  1. 로그인 요청 — 앱이 이메일·비밀번호로 POST /auth/login을 호출하고, Lambda가 Cognito의 USER_PASSWORD_AUTH 플로우를 실행합니다.
  2. 토큰 발급 — Cognito가 ID / Access / Refresh 토큰을 반환합니다. 앱은 이를 안전한 저장소에 보관합니다.
  3. 인증된 호출 — 이후 모든 보호 API 호출에 Authorization: Bearer <AccessToken> 헤더를 자동 첨부합니다(OkHttp Interceptor).
  4. 토큰 검증 — API Gateway JWT Authorizer가 Cognito JWKS 공개키로 서명과 만료를 검증합니다. 실패하면 Lambda까지 도달하지 않고 401을 반환합니다.
  5. 클레임 전달 — 검증을 통과하면 디코딩된 클레임이 이벤트 컨텍스트로 Lambda에 전달됩니다.
  6. 범위 제한 — Lambda는 sub를 파티션 키에 사용해 타인의 데이터를 조회할 수 없도록 원천 차단합니다.

3. 공개 라우트와 보호 라우트

회원가입·로그인은 토큰을 받기 전에 호출해야 하므로 공개로 두고, 그 외 전체를 $default 라우트에서 JWT로 보호합니다.

구분라우트인증이유
공개POST /auth/signup없음가입 시점에는 토큰이 없음
POST /auth/login없음토큰을 발급받는 진입점
POST /auth/confirm없음이메일 인증코드 확인
GET /health없음모니터링용 헬스체크
보호$default (그 외 전체)JWT 필수기본 차단(default-deny) 정책
기본 차단 설계

새 API를 추가하면 별도 설정 없이 자동으로 인증 보호를 받습니다. 공개로 열려면 명시적으로 공개 라우트 목록에 추가해야 하므로, 실수로 인증 없는 엔드포인트가 노출될 위험이 낮습니다.

4. 토큰 종류와 수명

토큰수명용도비고
Access Token1시간API 호출 인가API Gateway가 검증하는 대상
ID Token1시간사용자 프로필 정보(email, name)클라이언트 화면 표시용
Refresh Token30일Access/ID 토큰 재발급만료 시 재로그인 필요

5. 계정 정책

항목설정
로그인 식별자이메일 (자동 검증)
비밀번호 최소 길이8자
비밀번호 구성영소문자 + 숫자 필수
계정 복구검증된 이메일로 재설정
허용 인증 플로우USER_PASSWORD_AUTH, USER_SRP_AUTH, REFRESH_TOKEN_AUTH
← 데이터 · 통신 흐름 홈으로 →