0.목차
1. 개요
2. 세팅
3. 토큰생성(sign)
4. 디코드 payload(veryfy)
1. 개요
2022.03.03 - [경일/nodejs] - [node.js] 쿠키와 세션, 그리고 JWT
위 포스팅에서 jwt 방식으로 로그인을 구현했었다.
그리고 crypto 를 사용해서 직접 토큰을 암호화 하고,
64진수로 변환했던 payload를 다시 복호화 해서 사용했었다.
내용이 어렵진 않지만,
.. 굉장히 귀찮다..
그런데 이 귀찮은 걸 대신해주는 라이브러리가 있다..!
그리고 라이브러리를 하나하나 배울때 마다 느끼는 건데,
누군가가 나와 같은 생각을 했고,
그 사람이 똑똑한 사람이란것에 감사하게 된다..
2. 세팅
언제나 그렇듯 세팅은 매우 쉽다.
설치를 하고
$ npm install jsonwebtoken
땡겨온다
const jwt = require('jsonwebtoken');
준비 끝
3. 토큰생성(sign)
기존에 직접 구현했던 토큰은 만들기가 굉장히 힘들었다.
우선 헤더부분과 페이로드 부분을 스트링화 해서, 버퍼로 바꿨다가, 다시 64진수로 바꿨었다.
그리고 그 두개를 이어붙인뒤에 crypto 를 이용해서 salt 와 버무린 뒤, 암호화를 해서 시그니쳐를 만들었다.
그리고 인코딩된 헤더와 인코딩된 페이로드, 시그니처 이 세개를 . 으로 구분해서 하나의 스트링으로 만들면...
이게 토큰.. 이엇는데. 후우 힘들다.
말만해도 힘들다.
이 라이브러리는 무료로 토큰을 만들어줍니다..!
사용법도 간단하다.
jwt.sign(payload, secretKey, option)
이게 다임..
첫번째 인자값은 페이로드다. 그 페이로드 맞음
두번째 인자값은 시크릿키 인데 우리가 위에서 salt로 부르던 값이다.
그리고 세번째 인자값 옵션에는 어떠한 알고리즘을 사용할 것인지(HS256), 만료시간은 언제인지, 발급자는 누구인지 같은
정보들이 객체형태로 들어간다.
require('dotenv').config();
const jwt = require('jsonwebtoken');
const secretKey = process.env.SECRET_KEY;
const algorithm = process.env.JWT_ALG;
const expiresIn = process.env.JWT_EXP;
const issuer = process.env.JWT_ISSUER;
const option = { algorithm, expiresIn, issuer };
function makeToken(payload) {
return jwt.sign(payload, secretKey, option);
}
나는 우선 jwt 파일을 따로 뺐고, secertKey(salt) 와 옵션에 들어갈 내용들은 전부 .env 파일에 담아뒀다.
이렇게 만들어진 토큰을
쿠키파서를 이용해서(res.setHeader 로 해도 된다)
쿠키로 설정해주면 된다.
4. 디코드 payload(verify)
오키 로그인에 성공했다.
그리고 디비와 통신하지 않고 바로바로 페이로드에서 정보를 빼서 사용해주고 싶다면,
쿠키에 담겨있는 토큰을 가져와서
페이로드 부분을 디코딩해주면 된다.
이 역시도 저번 포스팅에서는 직접 했다...
근데 이 라이브러리는 대신 해준다.
최고다... JWT!
jwt.verify(token, secretKey);
ㅎㅎ 이게 다다.
저 메서드의 리턴값이 페이로드를 디코딩 한 값이다.
너무나 편안하다..
require('dotenv').config();
const jwt = require('jsonwebtoken');
const secretKey = process.env.SECRET_KEY;
const algorithm = process.env.JWT_ALG;
const expiresIn = process.env.JWT_EXP;
const issuer = process.env.JWT_ISSUER;
const option = { algorithm, expiresIn, issuer };
function makeToken(payload) {
return jwt.sign(payload, secretKey, option);
}
function decodePayload(token) {
return jwt.verify(token, secretKey);
}
module.exports = { makeToken, decodePayload };
jwt.js 의 코드이다.
이외의 전체 코드는 깃헙에 있다.
'경일 > nodejs' 카테고리의 다른 글
[node.js] 백엔드 서버에 저장된 이미지 프론트 서버에 전달 (0) | 2022.03.15 |
---|---|
[node.js] multer 이용해서 파일 업로드 (0) | 2022.03.15 |
[node.js] CORS 해결 방법 (SOP와 CORS) (0) | 2022.03.07 |
[node.js] axios를 이용한 비동기 통신 (0) | 2022.03.07 |
[node.js] 쿠키와 세션, 그리고 JWT (0) | 2022.03.03 |
댓글