jsonwebtoken은 jwt을 발행하고 검증하는 모듈이다.
JSON Web Token(JWT)는 인증과 권한이 필요한 정보 교환등에 사용되는 서명된 토큰 방식이다.
(활용 예시)
장점
jwt는 3부분으로 나누어져 있다.
형식: xxxxx.yyyyy.zzzzz
헤더는 2개의 부분으로 구성되어있다.
{
"alg": "HS256",
"typ": "JWT"
}
페이로드는 클레임을 포함하고 잇다.
클레임이란 엔터티(대게 사용자 정보) 및 추가적인 정보이다.
iss: 발행인exp: 만료시간 sub: 주제iat: 토큰 발행 시간⭐ 하지만 Payload에는 민감한 정보를 담지 않아야 한다.
사실 Header와 Payload는 완벽한 암호화가 아니기 때문에 누구나 jwt를 가지고 알아낼 수 있는 값이다.

서명을 넣지 않아도 Header와 Payload값이 드러난 것을 볼 수 있다.
⭐⭐ 생성된 토큰은 변조로부터 보호되지만 누구든 읽을 수 있다.
따라서 민감한 비밀 정보를 넣으면 안된다.
서명은 메세지가 도중에 변하지 않았는지 확인하는 데 사용된다.
즉 복호화 과정에서 사용된다.
npm i jsonwebtoken
import jwt from "jsonwebtoken";
const app = express();
const port = 8000;
app.get("/login", (req, res) => {
const payload = { id: "id", email: "id@email.com" };
const secretKey = "shhhh";
const token = jwt.sign(payload, secretKey, { expiresIn: "1m" });
res.cookie("token", token);
return res.status(200).json({ message: "로그인 완료" });
});
app.listen(port, () => {
console.log(`Example app listening at http://localhost:${port}`);
});
payload에 담길 클레임을 지정하는 옵션이다.
아무 옵션도 달지 않았을 경우 기본적으로 iat(발행시간)만 지정된다.
{
"id": "id",
"email": "id@email.com",
"iat": 1714380499
}
추가적으로
const decoded = jwt.verify(token, secretKey); // 복호화
참고문서
https://jwt.io/introduction
https://brunch.co.kr/@jinyoungchoi95/1