개요
- 사용자가 로그인하면 서버는 JWT 토큰을 생성하여 클라이언트에 전달합니다.
- 사용자는 이후 요청 시, Authorization 헤더 또는 Cookie에 access 토큰을 담아 인증을 수행합니다.
- 일반적으로 access token과 refresh token을 함께 사용하여 보안성과 사용자 경험을 모두 확보합니다.
JWT (Json Web Token)
JWT는 사용자 인증 및 권한 부여에 사용되는 토큰 포맷으로, 다음의 3부분으로 구성됩니다
1. Header (헤더)
- 토큰의 유형(JWT)과 서명에 사용된 알고리즘(HS256, RS256 등)을 명시
- Base64URL로 인코딩됨
{
"alg": "HS256",
"typ": "JWT"
}
2. Payload (페이로드)
- 사용자 정보, 토큰 발급자(iss), 만료 시간(exp) 등의 클레임(Claim) 을 담고 있음
- 인증/인가에 필요한 실제 데이터가 위치
- Base64URL로 인코딩됨
{
"sub": "user123",
"name": "John Doe",
"iat": 1516239022,
"exp": 1516242622
}
3. Signature (서명)
- Base64UrlEncode(header) + "." + Base64UrlEncode(payload) 의 결과에 서버의 비밀키(secret key) 를 이용해 서명 생성
- 해당 서명으로 토큰의 무결성과 신뢰성을 검증 가능
장점
- Stateless: 서버가 세션을 유지하지 않아도 됨 → 인증 저장소 불필요
- 경량화: XML 기반의 SAML에 비해 훨씬 가볍고 빠름
- 호환성: JSON 기반 → 다양한 언어에서 직렬화/역직렬화가 쉬움
- Self-contained: 토큰 하나로 사용자 인증 및 권한 정보를 모두 담고 있음
단점
- 정보 노출 위험: 토큰이 탈취되면 내부의 Payload는 누구나 디코딩할 수 있음 (암호화되지 않음)
- 비대화 문제: 토큰에 너무 많은 정보를 담을 경우, HTTP 헤더가 커져 서버에 부담
- 갱신 불가: JWT 자체는 수정할 수 없으며 만료 전까지는 유효함 → 토큰 폐기 어려움
'ZeroBase > CS' 카테고리의 다른 글
| HTTP 메서드 PUT, PATCH 차이 (3) | 2025.07.29 |
|---|---|
| HTTP메서드 GET, POST 차이 (1) | 2025.07.28 |
| 세션기반 인증 방식 (0) | 2025.07.25 |
| 로컬스토리지, 세션스토리지, 쿠키의 공통점과 차이점 (1) | 2025.07.25 |
| 웹 브라우저 캐시(쿠키) (1) | 2025.07.23 |