본 문서는 2022년 2월 8일 에 작성되었습니다.
WebSocket 과 같은 특이한 경우를 제외하고
기본적으로 클라이언트는 서버와 단절된 상태입니다.
그렇기 때문에 유저 정보를 저장하고 사용할 수단이 필요합니다.
`21.08 부터 지금까지는 Session 을 사용 하였습니다.
그러나 Session 을 이용한 방법의 한계 가 있기에
이를 극복하기 위해 JWT 라는 새로운 방법 이 생겨났습니다.
두 개념 모두 SECRET 키를 이용한 암,복호화를 하고 있기 때문에,
두 개념의 차이점은 DB 에 저장되었는지 여부입니다.
이러한 Session 의 정보는 다음과 같이 사용됩니다.
로그인이 완료된 유저의 브라우저 정보를 Session 에 저장하고
커스텀한 sessionMiddleware(혹은 localsMiddleware) 를 통해서 이를 쿠키의 형태로 브라우저 Storage 에 저장합니다.이렇게 저장한 정보를 사용하는 방법은 두 가지가 있습니다.
- 변수를 사용할 수 있는 HTML 탬플릿 엔진
- 텅 빈 DOM Element 의 dataset 에 정보를 기록하여 JavaScript 를 통해서 정보를 원하는 DOM Element 에 주입
그러나 서버에 저장되는 Session 의 특성상,
서버의 자원을 지속적으로 소요하게 된다는 문제가 있습니다.
이를 해결하기 위한 방법 중 하나로 도입된 개념이 바로 JWT 입니다.
JWT, Json Web Token 은 유저의 정보를 JSON 형태로 파싱하여 사용하는 것입니다.
JWT 는 기본적으로 클라이언트에게 보관된 정보입니다.
따라서 Session 과 같이 임의로 파괴할 수 없으며, 오직 만료기한을 통해서 파괴되는 특이성을 지니고 있습니다.
자세한 내용은 ## JWT 구조 파트를 참고해주세요.
npm i jsonwebtoken
{
"alg": "HS256",
"typ": JWT
}
JWT 안에 담을 내용들로 3가지가 있다.
이러한 내용을 Claim 이라고 부른다.
구분 | 내용 |
---|---|
iss | 토큰 발급자 |
sub | 토큰 제목 |
aud | 토큰 대상자(audience) |
exp | 토큰 만료시간 // NumericDate 형식, 148049146370 |
nbf | 토큰 활성 날짜 |
iat | 토큰 발급 경과 날짜 |
jti | 토큰 식별자 // 중복방지 목적, Access Token 에 사용 |
Custom Claim 일종으로, 공개용 정보를 위해서 사용한다.
URI 의 형태로 저장하여 사용한다.
Custom Claim 일종으로, 클라이언트 - 서버 간의 임의성 저이보를 위해서 사용한다.
jwt.sign(payload, secretOrPrivateKey, [options, callback])
말 그대로 JWT 입니다.
작성일 2022년 2월 8일 기준,
현재 JWT, jsonwebkoten 은 다음의 두 가지 알고리즘을 사용 중입니다.
1. HMAC SHA256
2. RSA SHA256
본 문서는 다음의 포스트를 참고하여 작성되었습니다.