JSON Web Token nedir?
Bir JSON Web Token (JWT), küçük bir talep yükü için kompakt, URL güvenli bir zarftır. Durumsuz web oturumları, OAuth/OIDC kimlik tokenleri, makineler arası API kimlik doğrulaması ve imzalı sihirli bağlantılar için standart kimlik bilgisi biçimidir. Bir JWT her zaman noktalarla birleştirilmiş üç base64url segmentidir: header.payload.signature. Başlık ve yük JSON'dur; imza, ilk iki segmentin üzerinde bir ikili MAC veya dijital imzadır.
JWT’ler nasıl çalışır?
Bu araç bir tokeni çözdüğünde, her JWT kitaplığının izlediği aynı üç adımlı yolu takip eder:
- Tokeni noktalar üzerinden tam olarak üç boş olmayan segmente bölün. Başka herhangi bir biçim hatalıdır.
- 0 ve 1 numaralı segmentleri base64url ile çözün, ardından her birini
JSON.parseile ayrıştırın. Başlık algoritmayı (alg) ve token türünü (typ) taşır. Yük ise talepleri (sub,exp,iat, özel anahtarlar) taşır. - Bir gizli anahtar sağlanırsa, başlıktaki algoritmayı kullanarak
<segment0>.<segment1>üzerinden MAC'i yeniden hesaplayın. Baytları üçüncü segmentle karşılaştırın. - Doğrulama sonucunu,
exptalebinden hesaplanan insan tarafından okunabilir bir son kullanma göstergesi dahil olmak üzere çözülmüş taleplerle birlikte gösterin.
JWT’ler neden tarayıcıda çözülmeli?
Gerçek, kullanımda olan bir JWT'yi uzak bir hata ayıklayıcıya yapıştırmak, kimlik bilgisini o hizmetin günlüklerine, gözlemlenebilirlik yığınına ve hizmetin veri gönderdiği herhangi bir ortağa sızdırır. Üçüncü taraf site tokenleri kaydetmediğini iddia etse bile, bunu doğrulamanın hiçbir yolu yoktur. Bu araç, bu ödünleşmeyi asla yapmak zorunda kalmamanız için inşa edilmiştir:
- Sıfır ağ: çalışma zamanında
fetch,XMLHttpRequestveyasendBeaconçağrısı yoktur. Çözme ve doğrulama sırasında Geliştirici Araçları'nı açın — Ağ paneli sessiz kalır. - Yerel Web Crypto: HMAC doğrulaması, çalışma zamanınızın çağıracağı aynı ilkel öğeler olan
crypto.subtle.importKeyvecrypto.subtle.signkullanır. - Statik dağıtım: her sayfa, tehlikeye atılacak sunucu uç noktası olmayan tek bir statik HTML dosyasıdır. Sızdırılacak bir sunucu olmadığı için sızdırılacak bir token da yoktur.
Bu araç neyi doğrular, neyi doğrulamaz?
Bu aracın 1. sürümü yalnızca HMAC-SHA ailesi imzalarını doğrular. Somut olarak:
- Desteklenen: HS256, HS384, HS512. Paylaşılan gizli anahtarı sağlayın; araç MAC'i yeniden hesaplayıp karşılaştıracaktır.
- Henüz desteklenmeyen: RS256/384/512 (RSA), ES256/384/512 (ECDSA), EdDSA ve PS256/384/512 (RSA-PSS). Bunlar PEM veya JWK biçiminde bir açık anahtar gerektirir ve kasıtlı olarak takip eden bir sürüme ertelenmiştir.
- Reddedilen:
alg: "none". Araç tokeni çözer ancak açıkça güvensiz olarak işaretler — imza doğrulaması yapılmıyor ve böyle bir tokeni kabul eden herhangi bir üretim sistemi ciddi bir güvenlik açığına sahiptir.
JWT kod çözme örneği nasıl görünür?
Yukarıdaki giriş alanına standart RFC 7519 örnek tokenini yapıştırın:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Başlık {"alg":"HS256","typ":"JWT"} olarak ve yük {"sub":"1234567890","name":"John Doe","iat":1516239022} olarak çözülür. Doğrulama paneline your-256-bit-secret girin ve imza kontrolü geçerli sonucunu döndürür. Gizli anahtarın tek bir karakterini değiştirin; geçersiz döndürür. Bunların hiçbiri tarayıcınızdan dışarı çıkmaz.
Bu, üretimde bir tokeni hata ayıklamamız gerektiğinde var olmasını istediğimiz JWT çözücüsüdür: gizliliğe saygılı, hızlı ve çalışma zamanının kullandığı aynı ilkel öğeler üzerine inşa edilmiş.