JWT(JSON Web Token)는 서버와 클라이언트 간의 인증과 정보 교환에 사용되는 토큰입니다.
클라이언트가 서버로부터 발급받은 JWT를 Authorization 헤더에 담아 사용하는 방법을 정리했습니다.
소스 코드
let jwt = require('jsonwebtoken');
const express = require('express');
const app = express();
const dotenv = require('dotenv');
dotenv.config();
app.listen(process.env.PORT, () => {
console.log(`Server on port number : ${process.env.PORT}.`);
});
app.get('/jwt', (req, res) => {
let token = jwt.sign({ foo: 'bar' }, process.env.PRIVATE_KEY);
res.cookie('jwt', token, {
httpOnly: true,
});
res.send(token);
});
환경 설정 : dotenv 모듈을 사용해 .env 파일에 저장된 PRIVATE_KEY와 PORT를 불러옵니다. JWT 발급 : /jwt 경로로 요청이 들어오면 토큰을 생성하고 응답에 담아 보냅니다.쿠키에 저장 : 발급된 JWT를 httpOnly 쿠키로 클라이언트에 전달합니다.Postman에서 /jwt API에 GET 요청을 보내면 JWT가 응답으로 발급됩니다.

응답(Response) 헤더의 JWT
서버가 응답으로 JWT를 발급하면 아래와 같이 Response Header에 포함됩니다.

Request Header에 저장된 JWT와 Response Header의 JWT가 일치하지 않는 경우도 확인할 수 있습니다.
| Request Header's cookie | Response Header's cookie |
|---|---|
| eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJpYXQiOjE3MjkwNjE1NjR9.X-owiNW41CHDZmOOfOqIUAOat7QALd2XOsinI7hbtrA | eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmb28iOiJiYXIiLCJpYXQiOjE3MjkwNjE1Njl9.9oiB9U6nnBiaBXjPiz-CxeGFrUmJ27nmSPVlhipRs2s |
다시 한 번 토큰 발행 요청을 했습니다.

직전에 요청해서 받은 Response cookie를 Server에 전달하고 있습니다.

클라이언트에서 Authorization 헤더에 담아 보낸 JWT를 디코딩해 보겠습니다.
소스 코드
app.get('/jwt/decoded', (req, res) => {
let token = req.headers['authorization'];
let decoded = jwt.verify(token, process.env.PRIVATE_KEY);
res.send(decoded);
});
JWT 디코딩
클라이언트가 Authorization 헤더에 담아 보낸 JWT를 서버에서 추출해 jwt.verify()로 디코딩합니다.
보안 유의점
JWT는 민감한 정보가 포함될 수 있어 Authorization 헤더에 담아 보내는 것이 안전합니다.
아래와 같이 Postman에서 발급된 JWT를 Authorization 헤더에 직접 추가해 요청을 보냅니다.

위 사진에서 보이는것과 같이 Header의 Authorization항목에 방금 발행된 토큰을 넣고 디코딩을 요청합니다.

서버는 Authorization 헤더에서 받은 JWT를 디코딩해 응답으로 반환합니다.

JWT 발급
서버가 JWT를 발급해 클라이언트에 쿠키와 응답으로 전달합니다.
Authorization 헤더 사용
클라이언트는 JWT를 Authorization 헤더에 담아 API 요청 시 인증합니다.
보안 및 관리 주의점
이전의 쿠키가 누적되면 오류가 발생할 수 있으며, 쿠키를 삭제하면 해결됩니다.
Authorization 헤더를 사용해 JWT를 안전하게 전달하는 것이 좋습니다.
JWT를 이용한 인증은 간결하고 효율적이지만, 쿠키 및 헤더 관리에 주의해야 합니다.