JWT

공부의 기록·2022년 2월 7일
0

Node.JS

목록 보기
15/32
post-thumbnail

JWT

본 문서는 2022년 2월 8일 에 작성되었습니다.


Intro

WebSocket 과 같은 특이한 경우를 제외하고
기본적으로 클라이언트는 서버와 단절된 상태입니다.

그렇기 때문에 유저 정보를 저장하고 사용할 수단이 필요합니다.

`21.08 부터 지금까지는 Session 을 사용 하였습니다.
그러나 Session 을 이용한 방법의 한계 가 있기에
이를 극복하기 위해 JWT 라는 새로운 방법 이 생겨났습니다.

두 개념 모두 SECRET 키를 이용한 암,복호화를 하고 있기 때문에,
두 개념의 차이점은 DB 에 저장되었는지 여부입니다.

🤔 Session ?

이러한 Session 의 정보는 다음과 같이 사용됩니다.

로그인이 완료된 유저의 브라우저 정보를 Session 에 저장하고
커스텀한 sessionMiddleware(혹은 localsMiddleware) 를 통해서 이를 쿠키의 형태로 브라우저 Storage 에 저장합니다.

이렇게 저장한 정보를 사용하는 방법은 두 가지가 있습니다.

  1. 변수를 사용할 수 있는 HTML 탬플릿 엔진
  2. 텅 빈 DOM Element 의 dataset 에 정보를 기록하여 JavaScript 를 통해서 정보를 원하는 DOM Element 에 주입

그러나 서버에 저장되는 Session 의 특성상,
서버의 자원을 지속적으로 소요하게 된다는 문제가 있습니다.

이를 해결하기 위한 방법 중 하나로 도입된 개념이 바로 JWT 입니다.

🤔 JWT 란?

JWT, Json Web Token 은 유저의 정보를 JSON 형태로 파싱하여 사용하는 것입니다.

JWT 는 기본적으로 클라이언트에게 보관된 정보입니다.
따라서 Session 과 같이 임의로 파괴할 수 없으며, 오직 만료기한을 통해서 파괴되는 특이성을 지니고 있습니다.

자세한 내용은 ## JWT 구조 파트를 참고해주세요.


✅ Install

npm i jsonwebtoken


✅ JWT 구조

  1. typ | type of token
  2. alg | sort of alogrithm
{ 
   "alg": "HS256",
   "typ": JWT
 }

Payload

JWT 안에 담을 내용들로 3가지가 있다.
이러한 내용을 Claim 이라고 부른다.

  1. Registered Claim
구분내용
iss토큰 발급자
sub토큰 제목
aud토큰 대상자(audience)
exp토큰 만료시간 // NumericDate 형식, 148049146370
nbf토큰 활성 날짜
iat토큰 발급 경과 날짜
jti토큰 식별자 // 중복방지 목적, Access Token 에 사용
  1. Public Claim

Custom Claim 일종으로, 공개용 정보를 위해서 사용한다.
URI 의 형태로 저장하여 사용한다.

  1. Private Claim

Custom Claim 일종으로, 클라이언트 - 서버 간의 임의성 저이보를 위해서 사용한다.



✅ Syntax

jwt.sign(payload, secretOrPrivateKey, [options, callback])

  1. payload
  2. secretOrPrivateKey
  3. [options, callback]

secretOrPrivateKey

Header > typ

말 그대로 JWT 입니다.

Header > alg

작성일 2022년 2월 8일 기준,
현재 JWT, jsonwebkoten 은 다음의 두 가지 알고리즘을 사용 중입니다.

1. HMAC SHA256
2. RSA SHA256


References

본 문서는 다음의 포스트를 참고하여 작성되었습니다.

JWT 를 이용한 RESTful API 만들기
JWT 란?

profile
2022년 12월 9일 부터 노션 페이지에서 작성을 이어가고 있습니다.

0개의 댓글