빙응의 공부 블로그

JWT 개요 본문

Spring/개인공부_이론

JWT 개요

빙응이 2024. 3. 24. 17:19

📝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의 토큰 생성 과정

 

  1. Payload와 Sercret Key를 서명 알고리즘에 입력해 서명을 만든다.
  2. 여기서는 HS256 서명알고리즘을 사용하여 이 정보를 Header로 만든다. 
  3. 이 정보들을 조립하고 base64로 인코딩한다. 

 

📝JWT 사용 이유

HTTP는 기본적으로 무상태성을 지향한다. 

  • 장점 1 : 서버의 확장성이 높아 대량의 트래픽이 발생해도 대처 가능하다.
    • 이 장점은 서버의 부담을 줄여 Spring Security보다 대용량 트래픽 처리에 효과적이다.
  • 장점 2 : 특정 DB/ 서버에 의존하지 않는 JSON 형식
  • 단점 1 : 세션 방식보다 많은 양의 데이터가 반복적으로 전송되어 네트워크 기능 저하 가능
  • 단점 2 : 데이터 노출로 인한 보안적인 문제 존재 
    • 해당 문제는 Payload의 정보를 쉽게 볼 수 있기 때문에 존재
    • 그렇기에 중요 정보는 담지 않는다. 

 

🚩토큰 VS 세션 

토큰 세션 방식의 차이를 알아보자 

  • 토큰 방식
    • 한 번의 데이터베이스 참조를 통한 로그인 검증 이후 토큰을 발행하여 지속적인 로그인동안 토큰 검증만 이루어지면 자동 로그인이 가능하다.
    • 장점
      • 저장 공간을 클라이언트 측이 감당하므로 서버의 부담이 줄어든다. 
      • 또한 토큰은 JSON 규격으로 유연성이 좋다. 
    • 단점
      • 토큰을 클라이언트가 가지고 있기 때문에 토큰의 안전 보호가 필요하다.
  • 세션 방식
    • 한 번의 데이터베이스 참조를 통한 로그인 검증 이후 세션을 발행하여 지속적인 로그인동안 세션 저장소의 검증을 이루어지면 로그인이 가능하다.
    • 장점
      • 세션 방식을 통한 정보 노출이 적어 보안적 측면에서 토큰 방식보다 뛰어나다.
      • 세션을 서버에 저장하므로 클라이언트가 세션 데이터 조작을 하기 어렵다. 
    • 단점
      • 그러나 세션을 서버에 저장하는 방식이기에 대용량 사용자 환경에서 서버 부하가 증가한다.
      • 또한 독자적인 세션 관리로 인한 확장성이 불편하다.

 

 

개인적으로 더 자세히 이해하고 싶으면 이 영상을 보세요 

(24) 세션 vs 토큰 vs 쿠키? 기초개념 잡아드림. 10분 순삭! - YouTube