Token JWT
JSON Web Token (JWT) cung cấp một phương thức an toàn để truyền thông tin giữa các bên dưới dạng đối tượng JSON.
Cấu trúc JWT
Một JWT gồm ba phần được ngăn cách bằng dấu chấm:
header.payload.signatureHeader
{ "alg": "HS256", "typ": "JWT"}Payload
{ "sub": "1234567890", "iat": 1516239022, "exp": 1516242622}Signature (chữ ký)
Chữ ký được tạo bằng:
HMACSHA256( base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)Tạo token JWT
Ví dụ 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'});Ví dụ 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')Dùng JWT với Brevo API
curl -X GET "https://api.brevo.com/v3/account" \ -H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \ -H "Accept: application/json"Kiểm tra tính hợp lệ của token
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 }; }};Phương pháp tốt nhất
- Dùng secret mạnh và ngẫu nhiên
- Đặt thời gian hết hạn phù hợp
- Kiểm tra token ở mọi yêu cầu
- Chỉ dùng HTTPS
- Lưu trữ secret một cách an toàn
- Triển khai logic làm mới token