URL, Cookie, Header와 같이 사용할 수 있는 문자가 제한된 환경에서 정보를 주고받을 수 있게 하는 데이터 표현 형식(Format)
헤더(Header), 페이로드(Payload), 서명(Signature) 세 부분을 점(.)으로 구분하는 구조
HEADER . PAYLOAD . SIGNATURE
{
"alg": "ES256",
"kid": "Key ID"
}
=>
Base64URLSafe(UTF-8('{"alg": "ES256","kid": "Key ID"}')) => eyJhbGciOiJFUzI1NiIsImtpZCI6IktleSBJRCJ9
JWT를 어떻게 검증(Verify)하는가에 대한 내용, alg: 알고리즘, kid : key 식별 값
{
"iss": "jinho.shin",
"iat": "1586364327"
}
=>
Base64URLSafe('{"iss": "jinho.shin","iat": "1586364327"}') -> eyJpYXQiOjE1ODYzNjQzMjcsImlzcyI6ImppbmhvLnNoaW4ifQ
Base64URLSafe(Sign('ES256', '${PRIVATE_KEY}',
'eyJhbGciOiJFUzI1NiIsImtpZCI6IktleSBJRCJ9.eyJpYXQiOjE1ODYzNjQzMjcsImlzcyI6ImppbmhvLnNoaW4ifQ'))) ->
MEQCIBSOVBBsCeZ_8vHulOvspJVFU3GADhyCHyzMiBFVyS3qAiB7Tm_MEXi2kLusOBpanIrcs2NVq24uuVDgH71M_fIQGg
const jwt = require('jsonwebtoken');
const secret = req.app.get('jwt-secret');
const token = jwt.sign({user_id: id}, secret,{expiresIn: '1h'});
const jwt = require('jsonwebtoken');
const verifyToken = (req, res, next) => {
try {
const secret = req.app.get('jwt-secret');
const clientToken = req.cookies.user;
const decoded = jwt.verify(clientToken, secret);
if (decoded) {
res.locals.userId = decoded.user_id;
next();
} else {
res.status(401).json({ error: 'unauthorized' });
}
} catch (err) {
console.log(err);
res.status(401).json({ error: 'token expired' });
}
};
앗 혹시 토큰을 쿠키에 담으시는 이유가 있으실까요 ?