본문 바로가기

[Node.js] JWT

⚡ JWT가 무엇일까

위키백과에 따르면 JWT는 JSON 웹 토큰은 선택적 서명 및 선택적 암호화를 사용하여 데이터를 만들기 위한 인터넷 표준으로 페이로드는 몇몇 클레임 표명을 처리하는 JSON을 보관하고 있다고 한다. 토큰은 비공개 시크릿 키 또는 공개/비공개 키를 사용하여 서명되는데 가령 서버에 "관리자로 로그인됨"이라는 클레임이 있는 토큰을 생성하여 이를 클라이언트에 제공할 수 있다고 한다. 그렇게 되면 클라이언트는 해당 토큰을 사용하여 관리자로 로그인됨을 증명한다고 한다.

 

그렇다면 JWT 토큰 구성은 어떻게 될까?

이미지 출처 : https://brunch.co.kr/@jinyoungchoi95/1

 

JWT는 세 파트로 나누어지며, 각 파트는 점으로 구분하여 표현되는데 그 표현은 그림과 같다. 순서대로 헤더(Header), 페이로드(Payload), 서명(Sinature)로 구성한다고 한다. 각각의 구성은 어떻게 되있는 걸까? 다음과 같다.

  • Header : 보통 토큰의 타입이나 서명 생성에 어떤 알고리즘이 사용되었는지 저장한다고 한다. 이미지 상에는 xxxxx부분이 헤더를 나타낸다. 
// Header
{
	"typ" : "JWT", // 토큰 유형을 나타내는 부분
    	"alg" : "HS512" // HMAC, SHA256, RSA와 같은 해시 알고리즘을 나타내는 부분
}

 

  • Payload : 토큰에 담을 클레임 정보를 포함하고 있다고 한다. Payload에 담는 정보의 한 조각을 보통 클레임이라고 부르고 이는 name/value 의 한쌍으로 이루어져 있으며 토큰에 여러개의 클레임을 넣을 수 있다. 위의 이미지에서는 yyyyy 부분이 페이로드에 해당된다.
// Payload
{
	"sub" : "1", // 토큰 제목 - 토큰에서 사용자에 대한 식별 값으로 사용됨
    	"iss" : "ori", // 토큰 발급자
    	"exp" : 1636989718, // 토큰 만료 시간
    	"iat" : 1636989718 // 토큰 발급 시간
}

 

  • Signature : 서명에 대한 정보를 담는다고 한다. 암호화 되어있으며 서버에 있는 개인키로만 암호화를 제거할 수 있다고 하며 다른 클라이언트가 임의로 Signature를 복호화 할 수는 없다고 한다. 위의 이미지에서는 zzzzz 부분이 그에 해당 된다고 볼 수 있다.

참조 : http://www.opennaru.com/opennaru-blog/jwt-json-web-token/

 

JWT (JSON Web Token) 이해하기와 활용 방안 - Opennaru, Inc.

JWT 는 JSON Web Token의 약자로 전자 서명 된 URL-safe (URL로 이용할 수있는 문자 만 구성된)의 JSON입니다.JWT는 속성 정보 (Claim)를 JSON 데이터 구조로 표현한 토큰으로 RFC7519 표준 입니다.

www.opennaru.com

참조 : https://brunch.co.kr/@jinyoungchoi95/1

 

JWT(Json Web Token) 알아가기

jwt가 생겨난 이유부터 jwt의 실제 구조까지 | 사실 꾸준히 작성하고 싶었던 글이지만 JWT를 제대로 개념을 정리하고 구현을 진행해본 적이 없었는데 리얼월드 프로젝트를 진행하면서 JWT에 대한

brunch.co.kr

'📖 TIL > Node.js' 카테고리의 다른 글

[Node.js] Cloud  (0) 2022.03.10
[Node.js] Social Login  (0) 2022.03.09
[Node.js] Cookie  (0) 2022.03.04
[Node.js] Login Process  (0) 2022.03.03
[Node.js] ERD  (0) 2022.03.02