2025. 5. 15. 11:12ㆍCoding Study/Node.js
토큰 인증 방식이란?
토큰은 쉽게 말해 입장권이나 출입증과 같은 인증 수단이다. 클라이언트가 서버로부터 인증을 받으면 서버는 토큰을 발급해주고, 클라이언트는 이 토큰을 들고 다니며 서버에 요청할 때마다 제출함으로써 인증을 대신하게 된다.
JWT (JSON Web Token) 소개
웹에서 많이 사용하는 토큰 방식 중 하나는 JWT 이다.
JWT는 JSON 형태의 데이터를 담고, 이를 인코딩하여 만든 토큰이다. 이 토큰은 총 3개의 구성 요소로 이루어져 있다.
1. Header (헤더)
- 토큰의 타입 (typ)과 알고리즘 정보 (alg)가 담겨 있다.
- 예시:
{
"alg": "HS256",
"typ": "JWT"
}
2. Payload (페이로드)
- 사용자 정보나 토큰에 담을 데이터가 들어간다.
- 예시:
{
"name": "John Doe",
"iat": 1718572800
}
3. Signature (서명)
- 헤더 + 페이로드를 Base64로 인코딩하고, 여기에 서버만 알고 있는 secret key를 더해 암호화한 값이다.
- 이 값이 기존의 시그니처와 일치하면 토큰의 무결성을 확인할 수 있다.
<토큰에 들어가는 값>
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiJ0ZXN0IiwiaWF0IjoxNzQ3MjgyNjQxLCJleHAiOjE3NDc4ODI2
Header payload
NDF9.BIsnShYyGRK5Yf54CWFV53TLUShGn_pjX9mab-2dEHU
signiture

클라이언트에서 get 요청을 보내면 가지고 있던 쿠키정보도 같이 전달되며 서버에서 Header와 Payload 값을 인코딩한 값에서
Secret을 더해 암호화 하는데 이값이 signature 값과 동일 해야 한다.

JWT 생성 및 검증 원리
- 서버는 사용자 인증 후 JWT를 생성한다.
- 헤더와 페이로드를 Base64로 인코딩한다.
- 여기에 서버만 알고 있는 secret을 추가하여 시그니처를 만든다.
- 이렇게 만든 header.payload.signature 조합이 최종 JWT가 된다.
- 서버는 JWT를 검증할 때, 받은 토큰의 헤더와 페이로드를 재조합하고 secret으로 시그니처를 다시 생성한다.
- 생성된 시그니처와 토큰의 시그니처가 일치한다면 유효한 토큰으로 간주한다.
액세스 토큰과 리프레시 토큰
토큰은 주로 아래 두 가지로 나뉜다.
1. 액세스 토큰
- 사용자의 인증 상태를 증명하기 위한 토큰이다.
- 만료 기간이 짧게 설정되어 있으며, 클라이언트는 이 토큰을 서버에 요청할 때마다 함께 보낸다.
2. 리프레시 토큰
- 액세스 토큰이 만료되었을 때 새로운 액세스 토큰을 발급받기 위해 사용된다.
- 리프레시 토큰까지 유출되면 심각한 보안 문제로 이어질 수 있으므로, 더 엄격하게 관리해야 한다.
모듈설치 (서버)
npm i jsonwebtoken
불러와서 사용하기 (서버)
const jwt = require('jsonwebtoken');
방법 1 : cookie 에 token 을 넣어서 전달

방법 2 : token을 변수에 저장(주황색 변경 내용)

jwt.sign 으로 토큰 발급
기본형식
const jwt = require('jsonwebtoken');
const token = jwt.sign(payload, secretOrPrivateKey, [options]);
| 매개변수 | 설명 |
| payload | 토큰에 담고 싶은 데이터 (예: 사용자 ID, 이메일 등) |
| secretOrPrivateKey | 서명에 사용할 비밀 키 (서버에서만 알고 있어야 함) |
| options | (선택) 토큰의 만료 시간, 알고리즘 등의 옵션 설정 |
<사용예시>
const accessToken = jwt.sign({ userId: userInfo.user_id }, secretKey, {
expiresIn: 1000 * 60 * 10,
});
secretKey : 인증 검증용 키 ( .env에 저장해서 불러온다 )
expiresIn : ms 단위로 작성하면 유효기간을 설정 가능 하다. (1000*60*10 --> 10분으로 설정됨)

jwt 공식 사이트
JSON Web Tokens - jwt.io
JSON Web Token (JWT) is a compact URL-safe means of representing claims to be transferred between two parties. The claims in a JWT are encoded as a JSON object that is digitally signed using JSON Web Signature (JWS).
jwt.io
Base64 디코딩 사이트
https://www.base64decode.org/ko/
Base64 디코딩 및 인코딩 - 온라인
Base64 형식에서 디코딩해보세요. 아니면 다양한 고급 옵션으로 인코딩해보세요. 저희 사이트에는 데이터 변환하기에 사용하기 쉬운 온라인 도구가 있습니다.
www.base64decode.org
'Coding Study > Node.js' 카테고리의 다른 글
| 카카오 로그인 기능 구현 (0) | 2025.05.16 |
|---|---|
| OAuth 인증 (0) | 2025.05.16 |
| Session (0) | 2025.05.14 |
| cookie (0) | 2025.05.14 |
| express / axios (0) | 2025.05.13 |