JWT токени
JSON Web Tokens (JWT) осигуряват сигурен начин за предаване на информация между страни под формата на JSON обект.
Структура на JWT
Един JWT се състои от три части, разделени с точки:
header.payload.signatureHeader
{ "alg": "HS256", "typ": "JWT"}Payload
{ "sub": "1234567890", "iat": 1516239022, "exp": 1516242622}Signature
Подписът се създава по следния начин:
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')Използване на JWT с Brevo API
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
- Съхранявайте тайните ключове сигурно
- Реализирайте логика за подновяване на токени