[JS] JWT(Json Web Token)
JWT(Json Web Token)란 무엇인가?
JWT는 JSON 형식의 정보를 안전하게 전송하기 위한 개방형 표준(RFC 7519)으로, 주로 인증 및 정보 교환에 사용됨.
JWT는 세 부분으로 구성되어 있으며, 각각의 부분은 점(.)으로 구분됨.
- Header: JWT의 유형과 서명 알고리즘을 정의.
- Payload: 실제로 전송할 데이터(클레임)를 포함.
사용자의 정보나 권한 같은 내용을 담을 수 있음 - Signature: 헤더와 페이로드를 조합한 후 비밀 키를 사용하여 생성된 서명으로, JWT의 무결성을 검증하는 데 사용됨.
JWT 처리 과정
- 인증: 사용자가 로그인하면, 서버는 사용자의 자격 증명을 확인.
- JWT 생성: 서버는 유효한 자격 증명이 확인되면 JWT를 생성하여 클라이언트에게 반환.
- 저장: 클라이언트는 JWT를 로컬 스토리지 또는 쿠키에 저장.
JWT 검증 방식
- 인증 요청: 클라이언트가 API 요청을 보낼 때, JWT를 HTTP 헤더(보통 Authorization 헤더의 Bearer 스킴)를 통해 포함시킴.
Authorization: Bearer <token>
-
서버 검증: 서버는 요청을 받을 때 JWT를 추출하고, 다음과 같은 과정을 통해 검증.
- 서명 검증: JWT의 서명이 유효한지 확인. 이 과정에서 비밀 키를 사용하여 서명을 재생성하고, JWT의 서명과 비교.
- 클레임 검증: JWT의 만료 시간(exp)과 같은 클레임을 검증.
재발급 방식과 주기
- 재발급 방식: JWT는 일반적으로 만료 시간을 설정하여 보안을 강화.
만료 시간이 지나면 클라이언트는 새로운 JWT를 요청해야 함.
이때, refresh token을 사용하여 재발급할 수 있습니다.- Refresh Token: 일반적으로 더 긴 만료 시간을 가진 토큰으로, 클라이언트가 JWT가 만료되었을 때 새로운 JWT를 얻기 위해 사용.
- 주기 관리: 서버는 특정 시간마다 JWT를 재발급하거나, 사용자가 로그아웃할 때 토큰을 무효화하는 방식으로 관리할 수 있음.
다른 API 서비스 호출 시 인증 처리
-
마이크로서비스 아키텍처: 여러 개의 API 서비스가 있을 경우, 클라이언트는 JWT를 사용하여 각 서비스에 접근할 수 있음.
각 서비스는 JWT를 검증하여 사용자의 인증 상태를 확인. -
API Gateway: API Gateway를 사용하면 모든 요청을 중앙에서 처리할 수 있음.
클라이언트가 API Gateway에 요청을 보낼 때 JWT를 포함시키면, Gateway가 JWT를 검증한 후 요청을 적절한 서비스로 전달. -
서비스 간 인증: 서비스 간의 통신이 필요한 경우, JWT를 사용하여 서로의 인증을 검증할 수 있음.
각 서비스는 JWT를 검증하여 요청의 출처와 유효성을 확인.