Token nədir və niyə lazımdır
HTTP vəziyyətsizdir: server hər sorğuda sizin kim olduğunuzu bilmir. Giriş edəndən sonra server sizə sübut (token) verir, klient onu hər sorğuya əlavə edir: Authorization: Bearer <token>. İki əsas model var: server tərəfdə sessiya (token yalnız açardır, vəziyyət serverdə) və öz-özünə yoxlanan token, məsələn JWT.
JWT üç hissədən ibarətdir: header.payload.signature. Hər hissə base64url ilə kodlanmış JSON-dur (imza istisna). Başlıqda alqoritm (alg), yükdə iddialar (sub, exp, iat, iss, aud) olur. İmza header.payload-ın gizli açar (HS256) və ya özəl açarla (RS256, ES256) imzalanmasıdır.
⚠️ JWT şifrələnməyib, yalnız imzalanıb: yükü hər kəs oxuya bilər. Parol, kart nömrəsi və digər həssas məlumatı oraya yazmayın.
JWT-ni klientdə oxumaq
Klient imzanı yoxlamır (açar onda yoxdur), amma yükdən faydalı şeylər oxuya bilir: istifadəçi adı, rol (interfeys üçün), exp (nə vaxt yeniləmək lazımdır). Base64url standart base64-dən -, _ simvolları və = olmaması ilə fərqlənir. UTF-8 üçün atob nəticəsini TextDecoder ilə açın.
const token =
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.' +
'eyJzdWIiOiI0MiIsIm5hbWUiOiJBeXNlbCIsInJvbGUiOiJlZGl0b3IiLCJpYXQiOjE3MDAwMDAwMDAsImV4cCI6MTkwMDAwMDAwMH0.' +
'c2lnbmF0dXJl';
function decodePart(part) {
const base64 = part.replace(/-/g, '+').replace(/_/g, '/');
const bytes = Uint8Array.from(atob(base64), (ch) => ch.charCodeAt(0));
return JSON.parse(new TextDecoder().decode(bytes));
}
function decodeJwt(jwt) {
const [header, payload] = jwt.split('.');
return { header: decodePart(header), payload: decodePart(payload) };
}
function isExpired(payload, now = Date.now()) {
return payload.exp * 1000 <= now;
}
const { header, payload } = decodeJwt(token);
console.log(header.alg, payload.sub, payload.role);
console.log('expired in 2026:', isExpired(payload, Date.UTC(2026, 0, 1)));
console.log('expired in 2031:', isExpired(payload, Date.UTC(2031, 0, 1)));Nəticə:
HS256 42 editor
expired in 2026: false
expired in 2031: true