Yükleme yok, %100 yerel, hesap yok

Nasıl yapılır

JWT bir token nasıl sızdırılmadan çözülür

Bir JSON Web Token gerçek veri taşır: hangi kullanıcıya verildiği, hangi kapsamları tanıdığı, ne zaman süresinin dolduğu. Bunu rastgele bir çevrimiçi çözücüye yapıştırmak, o veriyi ve çoğu zaman hâlâ geçerli bir oturumu kontrol etmediğin bir sunucuya teslim etmek demektir. Aşağıdaki çözücü tamamen tarayıcında çalışır, böylece bir token'ın içinde ne olduğunu okuyabilir, süresinin dolup dolmadığını denetleyebilir ve gizli anahtarı bildiğinde HMAC imzasını doğrulayabilirsin, hepsi de sekmenden tek bir ağ isteği çıkmadan.

Adım adım

  1. JWT çözücüyü aç ve token'ını giriş kutusuna yapıştır. Bir JWT, noktalarla birleştirilmiş üç Base64Url parçasından oluşur: başlık, yük ve imza. Onu Bearer ön ekiyle veya onsuz yapıştırabilirsin; araç her iki durumda da yapıyı okur ve biçim hatalıysa sana hemen söyler.
  2. Çözülmüş başlığı ve yükü oku. Başlık, imzalama algoritmasını (örneğin HS256 veya RS256) ve varsa anahtar kimliğini gösterir. Yük ise talepleri listeler: token'ın kime ait olduğu (sub), kimin verdiği (iss) ve zaman damgaları. Araç, sayısal iat, nbf ve exp alanlarını okunabilir tarihlere dönüştürür ve token'ın hâlâ geçerli mi yoksa zaten süresinin dolmuş mu olduğunu işaretler.
    Başlık algoritmasını ve okunabilir verilme ve son kullanım tarihleriyle yük taleplerini gösteren çözülmüş bir JWT
  3. Token HS256 kullanıyorsa ve paylaşılan gizli anahtarı elinde tutuyorsan, gizli anahtarı doğrulama alanına yapıştır ve Doğrula'ya tıkla. Araç, başlık ve yük üzerinden HMAC'i yeniden hesaplar ve imzayla karşılaştırır, böylece token'ın gerçek mi yoksa kurcalanmış mı olduğunu öğrenirsin. RS256 veya ES256 token'ları için imzalama, sende olmayan bir özel anahtarla yapılır, bu yüzden araç talepleri inceler ama imzayı doğruladığını iddia etmez.
    Paylaşılan gizli anahtarla doldurulmuş HMAC doğrulama alanı ve bir HS256 token'ı için geçerli imza rozeti

Bir token'ı neden hiçbir zaman rastgele bir siteye yapıştırmamalısın

Bir JWT şifrelenmemiştir. Başlık ve yük yalnızca Base64Url ile kodlanmıştır, yani token'ı alan herkes içindeki her talebi okuyabilir: e-posta, kullanıcı kimliği, roller, dahili bayraklar. Token süresi dolmamış bir erişim token'ıysa, onu elinde tutan kişi süresi dolana kadar onu yeniden kullanabilir ve senin yerine hareket edebilir. Canlı bir token'ı barındırılan bir çözücüye yapıştırdığında, bütün bunları o sunucunun günlüklerine gönderirsin. Token'ı yükleme yapmadan kendi makinende çözmek, onu görebilecek kişi sayısını artırmadan incelemenin tek yoludur. Çözerken ağ panelini açarak hiç trafik olmadığını doğrulayabilirsin.

İmza sana ne söyleyebilir, ne söyleyemez

İmza, birinin talepleri değiştirip yanına kâr kalmasını engelleyen şeydir. Bir HS256 token'ında aynı gizli anahtar hem imzalar hem doğrular, dolayısıyla gizli anahtarı biliyorsan token'ın gerçek olduğunu tam olarak burada doğrulayabilirsin. RS256 ve ES256 token'larında token'ı bir özel anahtar imzalar ve yalnızca eşleşen genel anahtar onu doğrular; özel anahtar veren tarafı asla terk etmez, bu yüzden istemci tarafındaki bir araç talepleri okuyabilir ama o genel anahtar olmadan imzayı dürüstçe kanıtlayamaz. İmza, doğrulayan anahtarın sahibi tarafından denetlenene kadar, çözülmüş yükü bir kanıt değil, verenin yaptığı bir iddia olarak gör. Gizli anahtarları ayrıca özetlemek veya karşılaştırmak için, bu sitedeki özet üretici de yerel olarak çalışır.

JWT yapısı ve her parçanın ortaya koyduğu bilgiler

Bir JWT, nokta işaretiyle ayrılmış üç Base64url kodlu segmentten oluşur: başlık, yük ve imza. Başlık, token türünü ("JWT") ve algoritmayı bildirir: HS256 (HMAC-SHA-256, paylaşılan bir gizli anahtar) veya RS256 (RSA-SHA-256, açık/özel anahtar çifti) en yaygın olanlardır. Yük, `sub` (konu, genellikle kullanıcı kimliği), `iat` (verilme Unix zaman damgası), `exp` (son kullanma Unix zaman damgası), `aud` (hedef kitle) ve roller veya kapsamlar gibi özel uygulama talepleri içerir. Base64url bir şifreleme değildir: `+` yerine `-`, `/` yerine `_` kullanan ve dolgu karakterlerini atlayan URL'ye uygun bir Base64 çeşididir. Ham token dizesine sahip olan herkes, imzalama anahtarı olmadan başlığı ve yükü çözebilir. Yalnızca imza segmenti doğrulama için anahtara ihtiyaç duyar. Bu nedenle canlı bir üretim tokenini harici bir çevrimiçi çözümleyiciye yapıştırmak bir güvenlik riskidir: token'ın `exp` değeri hâlâ ilerideyse ve servis girişi günlüğe kaydediyorsa temsil ettiği oturum tehlikeye girebilir.

Bu rehberde kullanılan araçlar

Sıkça sorulan sorular

Bir token'ı çözdüğümde herhangi bir sunucuya gönderiliyor mu?

Hayır. Çözücü token'ı böler, başlığı ve yükü Base64Url ile çözer ve bunları bellekte işler. İsteğe bağlı HMAC denetimi, tarayıcının yerleşik Web Crypto API'sini kullanır. Hiçbir şey ağ üzerinden gitmez ve bu önemlidir, çünkü bir JWT çoğu zaman kişisel veri ve hâlâ canlı bir oturum içerir. Çözerken tarayıcının ağ panelini aç, dışarı tek bir istek çıkmadığını göreceksin.

Bu araç bir RS256 veya ES256 imzasını doğrulayabilir mi?

Tam olarak değil ve öyleymiş gibi davranmaz. HS256 hem imzalama hem doğrulama için tek bir paylaşılan gizli anahtar kullanır, dolayısıyla o gizli anahtarı yapıştırmak aracın imzayı tarayıcında doğrulamasını sağlar. RS256 ve ES256 imzalamak için bir özel anahtar, doğrulamak için ayrı bir genel anahtar kullanır; araç talepleri ve son kullanım tarihini okuyup doğrular ama denetleyemediği bir imzayı öne sürmekten kaçınır. O token'lar için genel anahtarı tutan hizmette doğrulama yap.

Kaynaklar