JWT

송민지·2022년 5월 15일
0

JWT(Json Web Token)

JSON 객체로서 당사자간 정보를 안전하게 전송하기 위한 컴팩트하고 자급자족적인 방법을 정의하는 개방형 표준(RFC 7519)이다.이 정보는 디지털 서명되어 있기 때문에 검증되고 신뢰할 수 있다.JWT는 비밀(HMAC 알고리즘으로) 또는 RSA 또는 ECDSA를 사용하여 공개/개인 키 쌍을 사용하여 서명할 수 있다.

쿠키와 세션과는 달리 서버가 아닌 클라이언트에 정보가 저장되기 때문에 메모리나 스토리지등을 통해 세선을 관리했던 서버의 부담을 덜 수 있게 되었다.

가장 큰 특징은 토큰 자체에 사용자의 권한 정보나 서비스를 사용하기 위한 정보가 포함된다는 것으로 한번 발급된 이후 사용자의 정보를 변경하더라도 바로 반영되지 않는다.

JWT 사용 순서

  1. 클라이언트에서 사용자 아이디, 패스워드를 통해 웹서비스 인증
  2. 서버에서 서명된 JWT를 생성, 클라이언트에 돌려줌
  3. 클라이언트가 서버에 데이터를 추가적으로 요구할 때 JWT를 http Headerd에 첨부
  4. 서버에서 클러이언트에서 온 JWT검증

JWT 구조

JWT는 3개의 구조로 구성된다.

  • 헤더
  • 페이로드
  • 서명

따라서 일반적으로

xxxxx.yyyyy.zzzzz

이렇게 보인다.

JWT(header)

해더는 JWT토큰 유형과 HMAC SHA256 또는 RSA와 같이 사용중인 서명 알고리즘의 두 부분으로 구성된다.

{
  "alg": "HS256",
  "typ": "JWT"
}

이후 JSON은 Base64Url 인코딩되어 JWT의 첫 번째 부분을 형성한다.

JWT(payload)

페이로드는 클레임을 포함한다. 클레임에는 사용자의 데이터나 권한이 담겨있고 정보에 따라 registered, public, and private claims로 구분된다.
일반적으로는 private claims의 사용이 많다.

JWT(Signature)

해더와 페이로드를 대상으로 Base64 URL-safe Encodef를
적용하고 인코딩된 헤더, 인코딩된 페이로드, 비밀, 헤더에 지정된 알고리즘을 가져와 서명한다.

이러한 구조를 거치면 다음과 같은 인코딩된 값을 얻을 수 있다.

profile
기록하는 일상

0개의 댓글