JWT Nedir? JSON Web Belirteçlerinin Tam Açıklaması
Hızlı Yanıt
JWT, noktalarla ayrılmış üç Base64URL kodlanmış parçaya sahip bir dizgidir: header.payload.signature. Header algoritmayı belirtir, payload claim'leri (user ID, roles, expiration) içerir ve signature authenticity kanıtlar. Token içeriğini incelemek için ücretsiz JWT Decoder kullanın.
giriiş
JWT (JSON Web Token), RFC 7519 tarafından tanımlanan, taraflar arasında JSON object olarak güvenli bilgi iletmek için kompakt, URL-safe token formatıdır. JWT'ler web uygulamalarında authentication için yaygın olarak kullanılır: login sonrası sunucu bir JWT verir ve client bunu sonraki request'lere dahil eder. JWT'ler stateless'tir —sunucu token'ı veritabanında lookup yapmak zorunda değildir; token kendisi claim'leri ve signature içerir.
Adım adım
-
Üç parçalı yapıyı anlayın
Bir JWT üç bölümden oluşur: başlık (algoritma ve tür), yük (talepler) ve imza (bütünlüğü kanıtlar). Her parça Base64URL kodludur ve noktalarla ayrılmıştır: eyJhbGciOi...J9.eyJzdWIi...J9.signature. İlk iki bölüm, jetona sahip olan herkes tarafından okunabilir; yalnızca imza gizli anahtarı gerektirir.
-
Standart talepleri öğrenin
Yük, konuyla ilgili iddiaları ve beyanları içerir. Standart talepler: 'sub' (konu/kullanıcı kimliği), 'iat' (zaman damgasında yayınlanmıştır), 'exp' (son kullanma tarihi), 'nbf' (daha önce değil), 'iss' (verici), 'aud' (kitle). Özel talepler; rolleri, izinleri veya diğer verileri içerebilir.
-
İmzalama algoritmalarını anlama
JWT'ler simetrik (HS256 — paylaşılan sır) veya asimetrik (RS256, ES256 — genel/özel anahtar çifti) imzalamayı kullanır. İmza kurcalamayı önler: belirtecin herhangi bir bölümünü değiştirmek imzayı geçersiz kılar. Yalnızca gizli/özel anahtarın sahibi geçerli tokenlar oluşturabilir.
-
Kimlik doğrulama için JWT'leri kullanın
Oturum açtıktan sonra sunucu bir JWT oluşturur ve bunu istemciye gönderir. İstemci, sonraki istekler için Yetkilendirme başlığına (Taşıyıcı belirteci) JWT öğesini ekler. Sunucu imzayı doğrular ve son kullanma tarihini kontrol eder; veritabanı aramasına gerek yoktur.
Örnekler
JWT yapısı
Giriş: Tipik bir JWT
Çıkış: eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiJ1c2VyMSIsImV4cCI6MTY5MzYxMjgwMH0.signature
Kodu çözülmüş başlık
Giriş: İlk bölümün kodu çözüldü
Çıkış: {"alg": "HS256", "typ": "JWT"}
Kodu çözülmüş yük
Giriş: İkinci bölümün kodu çözüldü
Çıkış: {"sub": "user1", "name": "Alice", "iat": 1693526400, "exp": 1693612800}
Yaygın Sorunlar
- Kod çözme ve doğrulama — JWT kodunu çözmek (içeriğini okumak) onun gerçek olduğunu kanıtlamaz. Taleplere güvenmeden önce daima imza sunucusu tarafını gizli anahtarla doğrulayın.
- JWT'leri localStorage'da saklamak — bu, onları JavaScript için erişilebilir ve XSS saldırılarına karşı savunmasız hale getirir. Daha iyi güvenlik için httpOnly çerezlerinde saklayın.
- Uzun ömürlü tokenlar: Bir token çalınırsa, süresi dolana kadar geçerliliğini korur. Uzun oturumlar için yenileme belirteçleriyle birlikte kısa ömürlü erişim belirteçlerini (15-60 dakika) kullanın.
- Yükteki hassas veriler — yük, jetona sahip olan herkes tarafından okunabilir (Base64, şifrelenmemiştir). Veri yüküne asla şifre, kredi kartı veya sır koymayın.
İpuçları
- Herhangi bir talebe güvenmeden önce her zaman JWT imzasını sunucu tarafında doğrulayın; kod çözme tek başına kimlik doğrulama değildir.
- Belirteç hırsızlığından kaynaklanan hasarı en aza indirmek için uzun oturumlar için yenileme belirteçleriyle birlikte kısa ömürlü erişim belirteçleri (15-60 dakika) kullanın.
- XSS saldırılarını önlemek için JWT'leri localStorage yerine httpOnly, Secure, SameSite çerezlerinde saklayın.
- Token içeriklerini hata ayıklama amacıyla incelemek için JWT Kod Çözücümüzü kullanın; tokenınız tarayıcınızdan asla ayrılmaz.