JWT 토큰
JSON Web Token(JWT)은 당사자 간에 정보를 JSON 객체 형태로 안전하게 전송하는 방법을 제공합니다.
JWT 구조
JWT는 점으로 구분된 세 부분으로 구성됩니다.
header.payload.signature헤더
{ "alg": "HS256", "typ": "JWT"}페이로드
{ "sub": "1234567890", "iat": 1516239022, "exp": 1516242622}서명
서명은 다음과 같이 생성됩니다.
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)JWT 토큰 생성
Node.js 예시
const jwt = require('jsonwebtoken');
const payload = { userId: '12345', scope: ['email', 'contacts']};
const token = jwt.sign(payload, process.env.JWT_SECRET, { expiresIn: '1h', issuer: 'your-app', audience: 'brevo-api'});Python 예시
import jwtimport datetime
payload = { 'user_id': '12345', 'exp': datetime.datetime.utcnow() + datetime.timedelta(hours=1), 'iat': datetime.datetime.utcnow()}
token = jwt.encode(payload, 'your-secret-key', algorithm='HS256')Brevo API에서 JWT 사용하기
curl -X GET "https://api.brevo.com/v3/account" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \ -H "Accept: application/json"토큰 검증
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만 사용합니다
- 시크릿을 안전하게 보관합니다
- 토큰 갱신 로직을 구현합니다