본문으로 바로가기

JWT(Json Web Token)란?

category 컴퓨터공학 2021. 6. 9. 10:53

 

JWT(Json Web Token)이란

Json 객체를 사용해서 Token 자체에 정보들을 저장하고 있는 Web Token이라고 정의할 수 있다.

정보라고 한다면 로그인 시스템에서 유저 데이터를 예로 들수 있다. JWT는 클라이언트, 서버 사이에서 손쉽게 전달 될 수 있다. 웹 서버의 경우 HTTP 헤더에 넣어서 전달하거나, 쿼리스트링으로 전달할 수도 있다.

 

JWT 특징

로그인 시스템에서 유저가 로그인하면, 서버는 유저의 정보를 기반한 토큰을 발급해 클라이언트에 전달한다. 이후 유저가 서버에 요청을 할 때마다 서버에서는 토큰 검증을 하면서 유저가 요청한 작업 권한을 체크한다.

서버측에서는 유저의 세션을 유지할 필요가 없다. 즉 유저가 로그인한 상태인지 확인할 필요 없고 오로지 토큰 검증만 하면 되니 세션 관리가 필요없어 서버 비용을 아낄 수 있다.

 

JWT 구조

 

- 헤더(Header)

토큰의 헤더는 typ과 alg 두 가지 정보로 구성된다. alg는 Signature를 해싱하기 위한 알고리즘을 지정하는 것이다.

  • typ : 토큰의 타입을 지정 ex) JWT
  • alg : 알고리즘 방식을 지정하며, 서명(Signature) 및 토큰 검증에 사용 ex) HS256(SHA256) 또는 RSA

 

- 정보(Payload)

Payload 부분에는 토큰에 담을 정보가 들어가있다. 여기에 담는 정보 하나하나를 클레임(Claim)이라고 부르고, 이는 name/value의 한 쌍으로 이뤄져있다. 토큰에는 여러개의 클레임들을 넣을 수 있다.

 

클레임의 종류에는 크게 세 분류로 나눠져있다.

  • 등록된 (registed) 클레임
  • 공개 (public) 클레임
  • 비공개 (private) 클레임

 

- 서명(Signature)

 

서명(Signature)은 토큰을 인코딩하거나 유효성 검증을 할 때 사용하는 고유한 암호화 코드이다. 서명(Signature)은 위에서 만든 헤더(Header)와 정보(Payload)의 값을 각각 Base64로 인코딩하고, 인코딩한 값을 비밀 키를 이용해 헤더(Header)에서 정의한 알고리즘으로 해싱을 하고, 이 값을 다시 Base64로 인코딩하여 생성한다.

 

 

JWT 토큰 예시

생성된 토큰은 HTTP 통신을 할 때 Authorization이라는 key의 value로 사용된다. 일반적으로 value에는 Bearer이 앞에 붙여진다.

 

{ 
	"Authorization" : "Bearer {생성된 토큰 값}",
}

 

 

 

 

 

 

'컴퓨터공학' 카테고리의 다른 글

카카오 로그인 연동시 CORS 개념 정리  (0) 2021.11.22
HTTP GET, POST 방식에 대해  (0) 2020.12.07
Async/sync, Blocking/Non-Blocking  (0) 2020.08.14
jsessionid란??  (0) 2019.11.26