Nest · JWT Lifecycle

JWT 인증 수명주기

로그인 검증으로 access token을 발급하고, 보호 라우트 요청마다 JwtStrategy가 토큰을 검증해 req.user를 주입합니다.

JWT 인증 수명주기 전체 흐름 로그인 검증에서 access token 발급, 보호 API 검증, refresh 또는 401 분기까지 이어지는 흐름이다. Login username/password LocalGuard req.user 생성 JwtService.sign access token Bearer 요청 Authorization JwtGuard 서명 + exp req.user 주입 controller 권한 판단 보호 라우트 200 response refresh 유효: 새 access token 발급 후 같은 경로 재진입 401 / 재로그인 refresh 실패
발급 LocalGuard가 자격 증명을 확인하고 JwtService가 access token을 만든다.
요청 Bearer header로 보호 API를 호출하고 JwtGuard가 서명과 만료를 확인한다.
분기 유효하면 req.user, 만료면 refresh, 실패하면 401과 재로그인으로 갈라진다.
1

Login 요청

클라이언트가 username과 password를 제출합니다.

POST /auth/login
2

LocalStrategy 검증

자격 증명이 맞으면 validate 결과가 req.user가 됩니다.

AuthGuard('local')
3

JwtService.sign

sub, username, roles를 payload로 서명합니다.

access_token 반환
4

Bearer 요청

보호 API 호출마다 Authorization 헤더에 토큰을 담습니다.

Bearer <token>
5

JwtStrategy 검증

서명과 exp를 확인하고 유효하지 않으면 요청을 막습니다.

AuthGuard('jwt')
6

req.user 주입

validate(payload)가 반환한 사용자 객체가 request에 연결됩니다.

userId, roles
7

보호 라우트 처리

컨트롤러는 req.user를 기준으로 프로필이나 권한 로직을 수행합니다.

GET /auth/profile
8

응답 또는 갱신

정상 요청은 응답을 받고, 만료된 access token은 갱신 흐름으로 갑니다.

200 / refresh / 401

유효한 access token

JwtStrategy 검증을 통과하고 req.user가 주입되어 보호 라우트가 실행됩니다.

access token 만료

refresh token이 유효하면 서버가 새 access token을 발급해 같은 요청 흐름으로 돌아갑니다.

refresh 실패 또는 없음

서버는 401 Unauthorized를 반환하고 클라이언트는 로그인 화면으로 돌려보냅니다.

exp

수명주기의 핵심

access token은 요청 인증을 빠르게 처리하고, refresh token은 만료 후 재발급 책임만 맡기면 보안과 사용자 경험을 분리해 관리할 수 있습니다.