JWT (JSON Web Token) Decoder: Modern Kimlik Doğrulamanın Şifrelerini Çözün
Geleneksel web uygulamalarında kullanıcı giriş yaptığında (Login), sunucu bir "Session" (Oturum) oluşturur ve bu oturum bilgisini veritabanında saklayıp kullanıcıya bir çerez (Cookie) gönderirdi. Ancak modern, dağıtık (Microservices) ve sunucusuz (Serverless) mimarilerin yükselişiyle birlikte veritabanı sorguları çok maliyetli olmaya başladı. İşte tam bu noktada, 2015 yılında RFC 7519 standardı ile JWT (JSON Web Token) hayatımıza girdi. JWT, kullanıcının kimlik bilgilerini şifreli bir mühürle dijital olarak imzalayarak, sunucunun veritabanına bakmasına gerek kalmadan kullanıcının kim olduğunu anlamasını sağlayan devrim niteliğinde bir yetkilendirme (Authorization) teknolojisidir.
Uygulamanıza entegre ettiğiniz bir API'den, cep telefonunuzdaki bankacılık uygulamasına kadar neredeyse her modern sistem arka planda JWT kullanır. Bir JWT aslında rastgele yazılmış gibi görünen, aralarında nokta (.) bulunan üç farklı şifrelenmiş metin bloğundan oluşur. Geliştirdiğimiz JWT Decoder (Çözücü) aracı, bu karmaşık Base64 kodlu token'ı anında parçalayarak, içinde saklanan gerçek "Kullanıcı ID'si", "Rolleri" ve "Bitiş Süresi" gibi kritik bilgileri saniyeler içinde insan tarafından okunabilir bir JSON formatında (Payload) önünüze serer.
Bir JWT'nin Anatomisi: 3 Temel Parça
Geçerli bir JWT her zaman üç parçadan oluşur ve bu parçalar birbirinden kırmızı, mor ve mavi renkli noktalarla (.) ayrılır. Aracımız bu üç parçayı ayrı ayrı analiz eder:
- 1. Header (Başlık - Kırmızı Parça): Token'ın tipini (genellikle "JWT") ve şifreleme algoritmasını (HS256, RS256 vb.) belirtir. Sadece Base64Url formatındadır, yani şifreli (Encrypted) değildir.
- 2. Payload (Gövde/Yük - Mor Parça): Token'ın kalbidir. Kullanıcının ID'si, e-posta adresi, yetkileri (Admin/User) ve Token'ın ne zaman süresinin dolacağı (
exp- Expiration Time) gibi veriler (Claims) burada bulunur. Bu kısım da şifreli değildir, sadece Base64Url ile encode edilmiştir. - 3. Signature (İmza - Mavi Parça): Güvenliğin sağlandığı kısımdır. Header ve Payload birleştirilerek, sunucudaki gizli bir anahtarla (Secret Key) matematiksel olarak imzalanır. Aracımız bu imzayı çözemez çünkü gizli anahtarı sadece sunucu bilir. İmza, token'ın yolda hacklenip değiştirilmediğini (Veri Bütünlüğü) kanıtlar.
JWT Çözücü (Decoder) Kullanmanın En Büyük Avantajları
⏱️ Token Süresi (Expiration) Kontrolü
API'niz aniden "401 Unauthorized" (Yetkisiz) hatası mı veriyor? JWT'yi aracımıza yapıştırdığınızda "exp" (Expiration) değerini otomatik olarak normal saat dilimine çevirerek, token'ın süresinin ne zaman dolduğunu saniyesi saniyesine gösteririz.
👁️ Payload (Yetki) Analizi
Bir kullanıcıya "Admin" rolü verdiğiniz halde panelde admin özelliklerini göremiyorsa, sorunun frontend'de mi yoksa backend'den gelen JWT içinde mi olduğunu anında test edebilirsiniz. Belki de "role" değişkeni backend tarafından yanlış gönderiliyordur.
🔒 İstemci Tarafı (Client-Side) Güvenlik
Bu araç tamamen çevrimdışı (offline) çalışır. Müşterilerinize veya size ait özel bilgilerin (E-posta, ID) bulunduğu JWT'yi araca yapıştırdığınızda, hiçbir veri bizim sunucularımıza gitmez. Tüm çözümleme işlemi tarayıcınızda (Browser) biter.
🪲 Hata Ayıklama (Debugging) Hızı
Postman veya cURL kullanarak yaptığınız API testlerinde konsola düşen devasa token string'ini okumak imkansızdır. Kopyalayıp aracımıza yapıştırarak anında güzel formatlanmış (Beautified) JSON çıktısını görebilirsiniz.
Sıkça Sorulan Sorular (S.S.S.)
Bu araç token'ımın imzasını (Signature) doğruluyor mu?
Hayır. Bir JWT'nin 3. parçası olan imza kısmı ancak ve ancak backend sunucunuzda (Node.js, PHP, .NET) bulunan gizli şifre (Secret Key) ile doğrulanabilir. Bizim aracımız bir Decoder'dır (Çözücü), Verifier (Doğrulayıcı) değildir. Amacı, token içindeki okunamaz haldeki Base64 veriyi görünür kılmaktır.
Madem JWT kolayca çözülebiliyor, o zaman güvenli değil midir?
En yaygın yanlış anlama budur. JWT, verileri şifrelemek (Encrypt) için DEĞİL, verileri imzalamak (Sign) için tasarlanmıştır. Bu yüzden JWT'nin Payload (orta) kısmına ASLA kullanıcının şifresi, kredi kartı veya TC Kimlik numarası gibi gizli bilgiler konulmamalıdır. JWT'ye sadece User ID ve Rol gibi açık bilgiler konulur. İmza sayesinde hacker bu açık bilgiyi değiştirirse (Örneğin kendi rolünü 'User'dan 'Admin'e çekerse), sunucu imzanın bozulduğunu anlar ve token'ı anında reddeder.
"exp", "iat" ve "sub" gibi kısaltmalar (Claims) ne anlama geliyor?
Bunlar JWT standartlarına ait ayrılmış kelimelerdir (Registered Claims). exp (Expiration): Token'ın son kullanma tarihini, iat (Issued At): Token'ın ne zaman oluşturulduğunu, sub (Subject): Token'ın kime ait olduğunu (Kullanıcı ID), iss (Issuer) ise token'ı kimin (hangi sunucunun) dağıttığını belirtir.
API geliştirmeyi bir işkence olmaktan çıkarın! Güvenlik testlerinizi saniyeler içinde tamamlamak ve yetkilendirme sorunlarını anında tespit etmek için Bu JWT Decoder aracını kullanın.