빙응의 공부 블로그
JWT 개요 본문
📝JWT
JWT(JSON Web Token)
JWT란 JSON 객체로 당사자 간에 정보를 안전하게 전송하기 위한 간결하고 독립적인 방법을 정의하는 개방형 표준이다.
JWT는 비밀키 혹은 RSA 등을 사용하여 공개/개인 키 알고리즘을 구현할 수 있다.
📝JWT 구성
JWT는 예를 들면 편지라고 생각할 수 있다.
편지는 3가지로 구성된다.
- 여러 정보가 적힌 봉투
- 실제 내용이 담긴 편지지
- 누가 쓴 글인가 확인하는 서명
JWT도 위처럼 구성된다.
- 여러 정보가 적힌 봉투
- header라 부르며 일반적인 유형과 서명 알고리즘이 쓰여있다.
{
"alg": "HS256",
"typ": "JWT"
}
- 실제 내용이 담긴 편지지
- JWT에서 실제 내용이 담긴 곳을 Payload라 부르며 각 부분을 Claim이라고 한다.
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}
- 누가 쓴 글인가 확인하는 서명
HMACSHA256(
base64UrlEncode(header) + "." +
base64UrlEncode(payload),
secret)
여기서 JWT는 HTML, HTTP 환경에서 쉽게 전달 및 보안을 위해 3가지를 모두 합쳐 인코딩 방식으로 전송한다.
🚩JWT 토큰 생성 과정
JWT의 토큰 생성 과정
- Payload와 Sercret Key를 서명 알고리즘에 입력해 서명을 만든다.
- 여기서는 HS256 서명알고리즘을 사용하여 이 정보를 Header로 만든다.
- 이 정보들을 조립하고 base64로 인코딩한다.
📝JWT 사용 이유
HTTP는 기본적으로 무상태성을 지향한다.
- 장점 1 : 서버의 확장성이 높아 대량의 트래픽이 발생해도 대처 가능하다.
- 이 장점은 서버의 부담을 줄여 Spring Security보다 대용량 트래픽 처리에 효과적이다.
- 장점 2 : 특정 DB/ 서버에 의존하지 않는 JSON 형식
- 단점 1 : 세션 방식보다 많은 양의 데이터가 반복적으로 전송되어 네트워크 기능 저하 가능
- 단점 2 : 데이터 노출로 인한 보안적인 문제 존재
- 해당 문제는 Payload의 정보를 쉽게 볼 수 있기 때문에 존재
- 그렇기에 중요 정보는 담지 않는다.
🚩토큰 VS 세션
토큰 세션 방식의 차이를 알아보자
- 토큰 방식
- 한 번의 데이터베이스 참조를 통한 로그인 검증 이후 토큰을 발행하여 지속적인 로그인동안 토큰 검증만 이루어지면 자동 로그인이 가능하다.
- 장점
- 저장 공간을 클라이언트 측이 감당하므로 서버의 부담이 줄어든다.
- 또한 토큰은 JSON 규격으로 유연성이 좋다.
- 단점
- 토큰을 클라이언트가 가지고 있기 때문에 토큰의 안전 보호가 필요하다.
- 세션 방식
- 한 번의 데이터베이스 참조를 통한 로그인 검증 이후 세션을 발행하여 지속적인 로그인동안 세션 저장소의 검증을 이루어지면 로그인이 가능하다.
- 장점
- 세션 방식을 통한 정보 노출이 적어 보안적 측면에서 토큰 방식보다 뛰어나다.
- 세션을 서버에 저장하므로 클라이언트가 세션 데이터 조작을 하기 어렵다.
- 단점
- 그러나 세션을 서버에 저장하는 방식이기에 대용량 사용자 환경에서 서버 부하가 증가한다.
- 또한 독자적인 세션 관리로 인한 확장성이 불편하다.
개인적으로 더 자세히 이해하고 싶으면 이 영상을 보세요
(24) 세션 vs 토큰 vs 쿠키? 기초개념 잡아드림. 10분 순삭! - YouTube
'Spring > 개인공부_이론' 카테고리의 다른 글
[Spring API]Spring WebFlux와 WebClient (0) | 2024.05.24 |
---|---|
[Spring]예외 처리 전략 (0) | 2024.03.29 |
[Spring]스프링 시큐리티 - 구조 이해하기 (0) | 2024.03.22 |
[Spring]스프링 시큐리티 - 개요 (0) | 2024.03.21 |
[Spring]타임리프(Thymeleaf)에 대해 알아보자! 2편 (1) | 2024.01.21 |