JWT (JSON Web Token) nədir?
AI-dan cavab
sobes.tech Süni İntellekt
JSON Web Token (JWT) — bu formatı kiçik, URL üçün təhlükəsiz və JSON formatında tərəflər arasında məlumatların ötürülməsi üçün yoldur.
İş prinsipləri:
-
Token üç hissədən ibarətdir, nöqtə (
.) ilə ayrılmış:header.payload.signature. -
Header (Başlıq): Token haqqında meta məlumatlar, məsələn, token növü (JWT) və istifadə olunan imzalama algoritmi (məsələn, HS256, RS256).
{ "alg": "HS256", "typ": "JWT" } -
Payload (Yük): "claims" - iddialar və ya ötürmək istədiyimiz məlumatlar. Bir neçə növü var:
- Qeydiyyatdan keçmiş claims: Rezerv olunmuş, lakin opsional claims, məsələn,
iss(nəşr edən),exp(müddət),sub(mövzu). - İctimai claims: Ümumi istifadə üçün müəyyən edilmiş, IANA JSON Web Token Registry-də qeydiyyatdan keçməli və ya mübahisələrdən qorunan ad məkanını ehtiva edən URI olmalıdır.
- Özəl claims: Tərəflər arasında razılaşdırılmış təsdiqlər.
{ "sub": "1234567890", "name": "John Doe", "iat": 1516239022 } - Qeydiyyatdan keçmiş claims: Rezerv olunmuş, lakin opsional claims, məsələn,
-
İmza (Signature): Başlıq və yük kodlaşdırılmış şəkildə gizli və başlıqda göstərilən algoritm istifadə edilərək birləşdirilir. Bu, token-in bütövlüyünü təmin edir; əgər kimsə başlıq və ya yükü dəyişdirsə, imza etibarsız olacaq.
# HS256 istifadə edərək imza nümunəsi import hmac, hashlib header_str = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9' # Base64Url(Başlıq) payload_str = 'eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ' # Base64Url(Yük) secret = 'your_secret_key' # İmza = HMACSHA256(Base64Url(Başlıq) + "." + Base64Url(Yük), secret) signature = hmac.new( secret.encode('utf-8'), (header_str + '.' + payload_str).encode('utf-8'), hashlib.sha256 ).digest() # İmzanın Base64Url ilə kodlanması import base64 signature_b64url = base64.urlsafe_b64encode(signature).rstrip(b'=').decode('ascii') # Tokenin son forması: header_str + '.' + payload_str + '.' + signature_b64url
Tətbiqlər:
- Doğrulama: Server istifadəçiyə uğurlu autentifikasiya sonrası token verir. İstifadəçi hər sorğuda bu tokenı göndərir. Server tokenın düzgünlüyünü yoxlayır və resurslara girişə icazə verir.
- Məlumat mübadiləsi: Müxtəlif xidmətlər arasında təhlükəsiz kiçik məlumatların ötürülməsi.
Üstünlüklər:
- Kiçik: XML-ə nisbətən daha az məlumat ötürülür.
- Özünə kifayət edir: Token artıq istifadəçi haqqında lazım olan məlumatları ehtiva edir, bu da hər sorğuda verilənlər bazasına müraciət etmə ehtiyacını azaldır.
- Stateless: Server öz tərəfində sessiya məlumatlarını saxlamaq məcburiyyətində deyil.
- Kriptografik imza: Məlumatların bütövlüyünü təmin edir.
Çətinliklər:
- Token-in ləğv edilə bilməməsi: Bir dəfə verildikdən sonra, token müddəti bitənə qədər qüvvədədir, əgər qara siyahı mexanizmi tətbiq edilməyibsə.
- Gizli açarın təhlükəsiz saxlanması: Gizli açar təhlükəsiz şəkildə saxlanmalıdır.
- Həcmi:
payloadiçindəki məlumatların həcmi artdıqca, tokenin ölçüsü də artır.