JWT (JSON Web Token)
JSON 객체로 안전하게 전송하기 위한 방식
  • JWT를 암호화하여 당사자간 비밀 제공
  • 서명의 용도로도 사용
  • RSA, HS256

 

구조

 

  • Header : 어떤 알고리즘으로 서명했는지
  • Payload : 정보
    • 등록된 클레임: iss(발행자), exp(만료시간), sub(주제), aud(청중) 등
    • 개인 클레임: 유저 ID
  • Signature : Header + Payload + 키값 -> 암호화

각각이 Base64로 암호화

 

 

1) 알고리즘 - HS256 (HMAC-SHA256 기반 인증)

JWT 발급 과정

JWT 인증 검증 과정

 

 

2) 알고리즘 - RS256 (RSA SHA-256 기반 서명)

JWT 발급 과정

Signature를 생성할때
RSA(Header, Payload, 서버 개인키) 로 서명 생성

 

JWT 인증 검증 과정

서버는 클라이언트의 Signature를  서버의 공개키로 검증

 

 


 

세션 방식의 한계

 

  • 서버별로 세션 정보를 별도 저장해야 함
  • 서버 간 세션 공유를 위한 추가 인프라 필요 (Redis 등)

https://gamza-devlog.tistory.com/54

 

[Spring Security] Session

Session: 서버가 사용자를 기억하게 해주는 메모리HTTP 서버는 무상태(Stateless)이기 때문에 이전 요청을 기억하지 못하므로, 세션을 통해 사용자의 상태 정보를 지속적으로 유지세션이 사라지는 경

gamza-devlog.tistory.com

 

JWT를 사용하면
서버1, 서버2, 서버3 모두 같은 시크릿키만 보유 어떤 서버든 JWT 검증 가능 → 별도 세션 저장소 불필요

 

+ Recent posts