image

Jwt (Json Web Token)

태그
Dev
상세설명Jwt 란 무엇인가
작성일자2024.03.02

웹 보안에서 쓰이는 JWT 에 대해 정리해보았다.

JWT

Json Web Token의 줄임말로 자바스크립트의 JSON 자료구조를 가지고 있으며, Web Token으로써 사용할 수 있다는 의미이다. 주로 JWT 토큰은 사용자 인증과 로그인 유지를 위해 쓰인다.

JWT의 구조

 JWT는 헤더, 페이로드, 시그니처 구조로 이루어진다.

aaaaaaa.bbbbbbb.ccccccc // 헤더.페이로드.시그니처

헤더

서명 시 사용하는 키(kid). 토큰 타입(typ), 서명 암호화 알고리즘(alg) 정보가 들어있다.

// 예
{
	"kid" : "Key ID",
	"typ" : "JWT",
	"alg" : "ES256"
}
  • kid : 서명 시 사용하는 키(Public/Private Key)를 식별하는 값
  • typ : 토큰 유형
  • alg : 서명 암호화 알고리즘 HS256(HMAC SHA-256), HS512, RS256(RSASSA SHA-256), ES256(ECDSA P-256 curve SHA-256)
  • 페이로드

    내용에서는 전달하는 데이터를 포함할 수 있으며 데이터 각각의 Key를 claim이라고 부른다.

    그래서 사용자 정보의 한 조각인 클레임(claim)이 들어있다. claim에는 3가지 종류로 registered, public, private가 있다.

  • iss : 토큰 발급자(issuer) – Public Claims
  • sub : 토큰 제목(subject) – Public Claims
  • iat : 토큰 발급 시간(issued at) – Public Claims
  • exp : 토큰 만료 시간(expiration) – Public Claims
  • roles : 권한 – Private Cliams
  • 시그니처

    Signature는 헤더와 페이로드의 문자열을 합친 후에, 헤더에서 선언한 알고리즘과 key를 이용해 암호한 값이다. • Header(헤더) 와 페이로드(Payload)는 단순히 인코딩된 값이기 때문에 제 3자가 복호화 및 조작할 수 있지만, Signature(서명)는 서버 측에서 관리하는 비밀 키가 유출되지 않는 이상 복호화할 수 없습니다. 이는 토큰의 위변조 여부를 확인하는데 사용된다.

    JWT 인코딩

    https://jwt.io/

    JWT 장단점

    장점

  • 로컬에 저장하기 때문에 서버 용량에 영향을 끼치거나 받지 않는다.
  • 모바일 앱에서 사용하기 적합하다. - 플랫폼, 기기, 도메인 통신에서 독립적으로 사용자 인증을 처리할 수 있기 때문에 적합하다.
  • 네트워크 부하가 적다.
  • 단점

  • 토큰의 크기가 커질수록 트래픽에 영향을 미칠 수 있으며 토큰 만료 처리를 구현해야 한다.