---
title: "JWT 토큰 | Tajo"
description: "안전한 API 인증을 위한 JSON Web Token"
url: https://tajo.io/kr/docs/authentication/jwt-tokens/
markdown: https://tajo.io/kr/docs/authentication/jwt-tokens.md
lang: ko-KR
author: "Set Noa"
author_url: https://tajo.io/kr/set-noa/
robots: noindex
---

Tajo 사전 이용 신청

이름과 회사 이메일 주소를 입력하세요. Tajo 이용 신청을 확인할 수 있는 링크를 이메일로 보내드립니다.

# JWT 토큰

[Set Noa](https://tajo.io/kr/set-noa/)

JSON Web Token(JWT)은 당사자 간에 정보를 JSON 객체 형태로 안전하게 전송하는 방법을 제공합니다.

## JWT 구조

JWT는 점으로 구분된 세 부분으로 구성됩니다.

```
header.payload.signature
```

### 헤더

```json
{
  "alg": "HS256",
  "typ": "JWT"
}
```

### 페이로드

```json
{
  "sub": "1234567890",
  "email": "user@example.com",
  "iat": 1516239022,
  "exp": 1516242622
}
```

### 서명

서명은 다음과 같이 생성됩니다.

```
HMACSHA256(
  base64UrlEncode(header) + "." +
  base64UrlEncode(payload),
  secret
)
```

## JWT 토큰 생성

### Node.js 예시

```javascript
const jwt = require('jsonwebtoken');

const payload = {
  userId: '12345',
  email: 'user@example.com',
  scope: ['email', 'contacts']
};

const token = jwt.sign(payload, process.env.JWT_SECRET, {
  expiresIn: '1h',
  issuer: 'your-app',
  audience: 'brevo-api'
});
```

### Python 예시

```python
import jwt
import datetime

payload = {
    'user_id': '12345',
    'email': 'user@example.com',
    'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1),
    'iat': datetime.datetime.utcnow()
}

token = jwt.encode(payload, 'your-secret-key', algorithm='HS256')
```

## Brevo API에서 JWT 사용하기

```bash
curl -X GET "https://api.brevo.com/v3/account" \
  -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
  -H "Accept: application/json"
```

## 토큰 검증

```javascript
const validateToken = (token) => {
  try {
    const decoded = jwt.verify(token, process.env.JWT_SECRET);
    return { valid: true, payload: decoded };
  } catch (error) {
    return { valid: false, error: error.message };
  }
};
```

## 권장 사항

- 강력하고 무작위한 시크릿을 사용합니다
- 적절한 만료 시간을 설정합니다
- 모든 요청에서 토큰을 검증합니다
- HTTPS만 사용합니다
- 시크릿을 안전하게 보관합니다
- 토큰 갱신 로직을 구현합니다
