CS/웹개발
JWT
hyunji1109
2025. 1. 1. 02:16
클라이언트와 서버 간의 데이터를 안전하게 전송하기 위해 사용되는 토큰 기반 인증 방식이다.
JWT
- JWT는 JSON 형식의 웹 토큰으로, 주로 사용자 인증과 정보 교환에 사용된다.
- 서버와 클라이언트 간의 요청/응답에 사용자 정보를 포함시켜 안전하게 데이터를 전달한다.
- 자체 서명을 포함하여 데이터의 무결성을 보장한다.
- 예시
- RESTful API 인증
- JWT는 상태를 유지하지 않아 RESTful API와 같은 무상태 환경에서 사용자 인증 처리하는데 유용하다.
- OAuth 2.0
- OAuth 2.0 인증 시스템에서 액세스 토큰으로 자주 사용된다.
- RESTful API 인증
구조
헤더(Header)
- JWT가 어떤 방식으로 서명되어 있는지 메타데이터를 포함한다.
- 토큰의 타입과 해싱 알로리즘 정보를 가지고 있다.
페이로드(Payload)
- JWT의 본문에 해당된다.
- 실제 데이터를 담고 있다.
- 사용자의 정보나 권한등을 포함한다.
서명(Signature)
- 헤더와 페이로드를 특정 비밀 키로 서명한 값이다.
- JWT의 무결성을 검증한다.
- 변조를 방지하는 역할을 한다.
header.payload.signature
특징
- 무상태 인증
- JWT는 서버에 상태를 저장하지 않는다.
- 서버는 JWT를 발급할 때 그 내용은 클라이언트에게 전달되고 이후 클라이언트가 요청할 때 JWT를 다시 서버로 보내어 인증 받는다.
- 서버는 클라이언트의 상태를 관리할 필요가 없다.
- 자체 서명
- JWT는 성명된 토큰이기 때문에 데이터 변조를 방지한다.
- 서명을 검증하여 데이터가 변조되지 않았는지 확인한다.
장점
- 확장성
- 서버가 상태를 저장하지 않는다.
- 서버가 여러 대일 경우 상태를 공유할 필요도 없다.
- 보안성
- 서명을 통해 변조를 방지한다.
- 유연성
- 다양한 서비스 간 인증 정보를 공유할 수도 있다.
- 서버가 저장을 관리할 필요가 없다.
단점
- 토큰 탈취 위험
- JWT는 클라이언트가 보관하기 때문에 토큰이 탈취당할 수 있다.
- HTTS를 사용하거나 토큰 만료 시간을 짧게 설정하고 리프레시 토큰을 사용하는 방식을 선택한다.
- 큰 크기
- 세션 ID와 달리 페이로드에 데이터가 포함되어 토큰 크기가 상대적으로 크다.
쿠키 | 세션 | JWT | |
저장 위치 | 클라이언트에 저장 | 서버에 저장 | 클라이언트에 저장 |
상태 관리 | 서버와 클라이언트 간의 상태 관리 역할은 없음 | 서버에서 관리 | 클라이언트에서 관리 |
크기 제한 | 쿠키 크기 제한 | 서버 측에서 상태를 관리하기 때문에 큰 데이터 저장 불가 | JWT 자체에 모든 정보를 포함 크기가 커질 수 있음 |
보안 | 쿠키에 HttpOnly와 Secure 속성을 설정하여 보안 강화 가능 | 서버에 저장되어 있어 서버 측 보안이 중요 | 서명된 토큰을 사용하여 변조 방지 |
사용 예시 | 서버가 설정한 인증 정보를 클라이언트에 저장하여 요청 시 전달 | 로그인 후 세션 ID를 이용해 인증 관리 | 로그인 후 JWT로 인증 처리 |
만료 처리 | 쿠키에 만료 시간 설정 가능 | 서버에서 세션 만료 관리 | JWT는 유효 기간을 포함 만료 후 재발급 필요 |
주요 특징 | 클라이언트에 저장된 데이터를 서버로 자동 전달 | 세션 ID를 통해 상태 관리 서버에서 클라이언트의 정보를 추적 |
상태 관리 없음 토큰 기반 인증 서명된 정보 포함 |