Jwt란?

이승언·2025년 3월 31일

Json Web Token

  • 서비스에서 유저를 인증하고 식별하기 위한 Token(토큰) 기반 인증 방식
  • 토큰은 세션과 달리 서버가 아닌 클라이언트에 저장된다.
  • 인증에 필요한 정보들을 암호화시킨 Json형식의 토큰

JWT의 구조 & 생성 & 발급

<구조>

Header(헤더)

JWT에서 사용할 타입해시 알고리즘의 종류
{
"alg": "HS256",
"typ": "JWT"
}

Payload(페이로드)

서버에서 첨부한 사용자 권한 정보사용자의 데이터
"...": "..."의 key-value의 한 쌍을 Claim이라고 한다.
{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}

Signature(서명)

  • Header, Payload 를 Encode를 한 이후 Header 에 명시된 해시함수를 적용하고, 개인키(Private Key)로 서명한 전자서명
  • (헤더 + 페이로드)와 서버가 갖고 있는 유일한 key 값을 합친 것을 헤더에서 정의한 알고리즘으로 암호화를 한다.
    HMACSHA256(
    base64UrlEncode(header) + "." +
    base64UrlEncode(payload),
    secret)

<JWT 인증 과정>

서버는 JWT를 이용해 토큰의 정보를 아는 게 중요한 것이 아니라
클라이언트가 요청과 함께 보낸 JWT가 유효한 토큰인지 검사하는 것이 중요하다.

클라이언트가 보낸 JWT의 Header, Payload를 서버의 key값을 이용해 Signature를 만들어 클라이언트가 보낸 Signature와 일치하는지 확인하고 일치하면 인증을 통과시킨다.(인가)

토큰의 진짜 목적은 정보 보호보다는 위조 방지이다.


JWT 장점

  • 데이터의 위변조를 방지한다.

  • JWT는 인증에 필요한 모든 정보를 담고 있기 때문에 인증을 위한 별도의 저장소가 없어도 된다.

  • 세션(Stateful)과 다르게 서버는 무상태(StateLess)가 된다.

  • 확장성이 우수하다.

  • 토큰 기반으로 다른 로그인 시스템에 접근 및 권한 공유가 가능하다.(쿠키와의 차이)

  • OAuth의 경우 소셜 계정을 통해서 다른 웹서비스에 로그인 할 수 있다.

  • 모바일에서도 잘 동작한다.(세션은 모바일x)

Tip
서버에서 가장 피해야 할 것은 DB 조회이다.
서버가 죽는 경우 중 대부분은 DB가 터져서 서버도 같이 죽는 경우이다.
이와 관련해서 JWT는 DB조회가 필요없다는 장점을 가지고 있다.

JWT 단점

  • 쿠키/세션과 다르게 토큰의 길이가 길어, 인증 요청이 많아질수록 네트워크 부하가 심해진다.
  • Payload 자체는 암호화가 되지 않아 중요한 정보는 담을 수 없다.
    토큰을 탈취당한다면 대처가 매우 어렵다.
profile
꾸준히 점진적으로 성장하는 인간

0개의 댓글