JWT'yi Çözme ve Claimlerini Güvenli İnceleme
Hızlı Yanıt
JWT, noktalarla birleştirilmiş üç Base64URL dizgidir: header.payload.signature. Claim'leri incelemek için header ve payload'ı Base64URL decoding ile çözün —ama çözme sadece veriyi okur, authenticity doğrulamaz. Her zaman server'da signature doğrulayın. Token'ları incelemek için JWT Decoder kullanın.
giriiş
JSON Web Token (JWT, RFC 7519), authentication ve authorization için kullanılan kompakt, URL-safe token formatıdır. Noktalarla ayrılmış üç Base64URL kodlanmış parçaya sahiptir: header.payload.signature. Header algoritmayı açıklar, payload claim'leri (user id, roles, expiry) taşır ve signature token güvenilir bir tarafça verilmiş olduğunu kanıtlar. Kritik: header ve payload kodlanmış, şifrelenmemiş —herkes okuyabilir.
Adım adım
-
Tokenı üç parçaya bölün
Bir JWT xxxxx.yyyyy.zzzzz'a benziyor. Başlığı (bölüm 0), yükü (bölüm 1) ve imzayı (bölüm 2) elde etmek için nokta karakterini bölün. Tam olarak üç parça yoksa belirteç hatalı biçimlendirilmiştir.
-
Base64URL-başlığın kodunu çözer
Başlık, {"alg":"HS256","typ":"JWT"} gibi Base64URL kodlu bir JSON nesnesidir. Base64URL, + ve / yerine - ve _ kullanır ve dolguyu atlar. Kodunu çözün, ardından algoritmayı okumak ve yazmak için JSON.parse komutunu kullanın. JWT Kod Çözücümüz bunu otomatik olarak yapar.
-
Base64URL-yükün kodunu çözer (talepler)
Yük, JSON talep nesnesidir. Kayıtlı talepler arasında iss (verici), sub (konu), aud (hedef kitle), exp (son kullanma tarihi), nbf (önce değil), iat (verilme tarihi) ve jti (belirteç kimliği) bulunur. Özel talepler uygulamaya özeldir (ör. rol, e-posta). Şifreyi çözün ve inceleyin, ancak doğrulanana kadar güvenmeyin.
-
Son kullanma tarihini ve daha önce olmayan talepleri kontrol edin
exp ve nbf Unix zaman damgalarıdır (saniye). Mevcut süre exp'yi geçmişse jetonun süresi dolmuştur ve reddedilmelidir. Geçerli saat nbf'den önceyse jeton henüz geçerli değildir. UX için bu istemci tarafını kontrol edin, ancak güvenlik için bunları sunucu tarafında uygulayın.
-
Sunucudaki imzayı doğrulayın (asla istemci tarafında değil)
İmza, HS256 için HMAC-SHA256(gizli, başlık.payload) veya RS256/ES256 için RSA/ECDSA imzasıdır. Doğrulama, tarayıcıya asla ulaşmaması gereken gizli veya genel anahtarı gerektirir. Doğrulamak için jsonwebtoken (Node) veya jose gibi bir kitaplık kullanın; asla kendi kriptonuzu yazmayın.
Örnekler
Tipik bir JWT (üç parça)
Giriş: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpmeJf36POk6yJV_adQssw5c
Çıkış: Header: {"alg":"HS256","typ":"JWT"} Payload: {"sub":"1234567890","name":"John Doe","iat":1516239022}
Standart taleplerle kodu çözülmüş yük
Giriş: Gerçek bir kimlik doğrulama jetonunun yükü
Çıkış: {"sub":"user-42","iss":"freeonlinetoolsgo.com","exp":1767229200,"iat":1767225600,"role":"admin"}
Süresi dolmuş jeton tespiti
Giriş: exp: 1609459200 (2021-01-01) 2026-08-28'de kontrol edildi
Çıkış: Token is expired —current time (1767225600) > exp (1609459200). Reject and prompt re-login.
Yaygın Sorunlar
- Kod çözmeyi doğrulama olarak ele alma: Herkes herhangi bir iddiayla ve sahte imzayla bir JWT oluşturabilir. Kod çözme, yükü okur ancak hiçbir şeyi kanıtlamaz. Taleplere güvenmeden önce her zaman imzayı sunucudaki gizli/genel anahtarla doğrulayın.
- 'Yok' algoritmasının kullanılması: JWT spesifikasyonu, güvenli olmayan belirteçler için alg: none'a izin verir. Doğrulayıcınız alg: none'u kabul ederse, saldırgan jetonları taklit edebilir. Kitaplığınızı hiçbirini reddedecek ve beklenen algoritmaları beyaz listeye alacak şekilde yapılandırın.
- JWT'leri localStorage'da depolamak: XSS, localStorage'ı okuyabilir ve belirteçleri dışarı çıkarabilir. Oturum belirteçleri için httpOnly, Secure, SameSite=Strict çerezlerini veya yenileme belirteçli çerez içeren kısa ömürlü bellek içi belirteçleri tercih edin.
- Exp/aud/iss kontrol edilmiyor: çalınan bir jeton, süresi dolana kadar geçerlidir. Hizmetler arasında belirtecin yeniden oynatılmasını önlemek için her istekte exp (son kullanma tarihi), aud (hedeflenen kitle) ve iss'i (verici) her zaman kontrol edin.
İpuçları
- Kısa ömürlü erişim belirteçleri (15 dakika) artı uzun ömürlü yenileme belirteçleri kullanın; bu, bir erişim belirtecinin çalınması durumunda pencereyi sınırlar.
- Birden fazla hizmet belirteçleri doğruladığında HS256 (simetrik) yerine RS256'yı (asimetrik) tercih edin: her hizmet genel anahtarı alır ve yalnızca verenin özel anahtarı vardır.
- Sunucunun ne yayınladığını denetlemek için geliştirme sırasında JWT Kod Çözücümüzü kullanın; bu, kodu çözülmüş başlığı, yükü ve belirteci herhangi bir yere göndermeden insanlar tarafından okunabilen bir talep özetini gösterir.
- Hassas verileri (şifreler, PII) hiçbir zaman JWT verisine koymayın; bu veriler Base64 kodlanmıştır, şifrelenmemiştir ve jetonu ele geçiren herkes her talebi okuyabilir.