İçeriğe geç

JWT Çözücü rehberi

Araç rehberi. Güncellendi .

JSON Web Token'lar nasıl kurulur, XGM JWT Çözücü talepler ve son kullanma hakkında ne gösterir, imza doğrulaması nasıl çalışır ve hangi hatalardan kaçınmalı.

Bir JWT nasıl kurulur

Bir JSON Web Token (RFC 7519), kullanıcı kimliği ve son kullanma zamanı gibi talepleri sistemler arasında taşımanın kompakt bir yoludur. Noktalarla ayrılmış üç bölümden oluşur: imzalama algoritmasını adlandıran bir başlık, talepleri taşıyan bir yük ve ilk iki bölümün üzerine hesaplanan bir imza. Bölümlerin her biri base64url ile kodlanır. Ortaya çıkan dize bir HTTP başlığına, bir çereze ya da bir sorgu parametresine sığacak kadar kısadır; API'lerde ve oturum açma sistemlerinde bu kadar yaygın olmasının nedeni de budur.

Bir token'ın anatomisi (kısaltılmış)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9      header:    {"alg":"HS256","typ":"JWT"}
.eyJzdWIiOiIxMjMiLCJleHAiOjE3NTc5MDAwMDB9  payload:   {"sub":"123","exp":1757900000}
.3q2-7wrBx...                            signature: HMAC-SHA256 over header.payload

Başlığı ve yükü herkes çözebilir; base64url bir kodlamadır, şifreleme değildir. Token'ı güvenilir kılan şey imzadır: yalnızca doğru anahtara sahip bir taraf onu üretebilir ve başlıkta ya da yükte yapılan en küçük değişiklik imzayı bozar. Şifrelenmiş token'lar da vardır (JWE), ancak API'lerde ve oturum açma sistemlerinde dolaşan token'ların büyük çoğunluğu yalnızca imzalıdır. Bu yüzden bir token'ın içindeki hiçbir alanı gizli kabul etmeyin; token'ı ele geçiren herkes onu tam olarak bu sayfanın okuduğu gibi okur.

Bir sunucu bir JWT'yi nasıl doğrulamalıSunucu algoritmayı bir izin listesine karşı kontrol eder, imzayı beklenen anahtarla doğrular, ardından taleplere güvenmeden önce zaman taleplerini, ihraççıyı ve hedef kitleyi kontrol eder.Ayır ve çözBaşlık, yük ve imza base64url biçimindençözülüralg değerini izin listesiyle karşılaştırnone değerini ve yapılandırmadığınız heralgoritmayı reddedinİmzayı doğrulaHS* için paylaşılan gizli anahtar; RS*, PS* veES* için açık anahtarZaman taleplerini kontrol etexp gelecekte, nbf geçmişte; küçük bir saatsapmasına izin veriliriss ve aud değerlerini kontrol etBeklenen tarafça bu hedef kitle için verilmiş;ancak sonra talepleri kullanın
Sunucu algoritmayı bir izin listesine karşı kontrol eder, imzayı beklenen anahtarla doğrular, ardından taleplere güvenmeden önce zaman taleplerini, ihraççıyı ve hedef kitleyi kontrol eder.

JWT Çözücü nasıl kullanılır

  1. JWT Çözücü aracını açın ve bir token yapıştırın. Token siz yazarken tarayıcınızda çözülür.
  2. Başlığı ve yükü biçimlendirilmiş JSON olarak okuyun; altındaki algoritma, son kullanma ve talep notlarını da gözden geçirin.
  3. İmzayı doğrulamak için HMAC gizli anahtarını girin (anahtar bu biçimde saklanıyorsa base64url kutusunu işaretleyin) ya da PEM veya JWK biçiminde bir açık anahtar yapıştırın.
  4. İmzayı doğrula düğmesine basın ve sonucu okuyun.

Gerçek token'ları parola gibi görün

Geçerli bir token, süresi dolana kadar erişim sağlar. Çözücü token'ları ya da anahtarları hiçbir zaman sunucuya yüklemez ve URL'ye koymaz; yine de elinizde varsa süresi dolmuş veya test token'larını tercih edin ve üretim imzalama anahtarlarını paylaşılan ekranlara ya da destek kayıtlarına asla yapıştırmayın.

Kayıtlı talepler

Standart talepler (RFC 7519 §4.1)
TalepAdAnlamı
issİhraççıToken'ı kimin oluşturup imzaladığı
subÖzneToken'ın kim ya da ne hakkında olduğu, çoğu zaman bir kullanıcı kimliği
audHedef kitleToken'ın kime yönelik olduğu; alıcıların bunu kontrol etmesi gerekir
expSon kullanma zamanı1970-01-01 UTC'den bu yana geçen saniye; bundan sonra token reddedilmelidir
nbfŞu zamandan önce geçersizToken'ın bu andan önce reddedilmesi gereken zaman
iatVeriliş zamanıToken'ın ne zaman oluşturulduğu
jtiJWT kimliğiBenzersiz tanımlayıcı; iptal listeleri ve tekrar saldırısı korumasında işe yarar
Tipik bir erişim token'ı yükü
{
  "iss": "https://auth.example.com",
  "sub": "user-8812",
  "aud": "https://api.example.com",
  "iat": 1789462800,
  "exp": 1789463700,
  "scope": "orders:read"
}

Zaman talepleri milisaniye değil, saniye cinsinden Unix zaman damgalarıdır. Çözücü bunları cihazınızın saatini kullanarak “3 saat önce süresi doldu” ya da “14 dakika daha geçerli” gibi okunabilir sürelere çevirir. Cihazın saati yanlışsa bu süreler de yanlış olur. Yeni verilmiş bir token'ın beklenmedik biçimde süresi dolmuş görünmesinin en yaygın iki nedeni budur: kayan bir cihaz saati ya da milisaniye cinsinden yazılmış bir exp değeri. Tabloda yer almayan scope, role ya da email gibi alanlar özel taleplerdir; anlamlarını standart değil, token'ı veren sistem belirler.

Çözücünün uyardığı durumlar

Çözücü notları
NotÖnemNedeni
alg değeri “none”KritikToken imzasızdır; bunu kabul etmek herkesin istediği talebi uydurmasına izin verir
Başlıkta alg yokKritikKütüphaneler algoritma belirtmeyen token'ları reddetmelidir
İmza bölümü boşKritikİmzalı bir algoritma, imza olmadan geçerli olamaz
… önce süresi doldu (exp)UyarıSunucuların token'ı reddetmesi gerekir
exp talebi yokUyarıSunucu bir ömür dayatmadıkça token hiçbir zaman sona ermez
Henüz geçerli değil (nbf)UyarıToken başlangıç zamanından önce kullanılıyor ya da saatler birbirinden farklı
iat gelecekteUyarıİhraççının saati büyük olasılıkla yanlış
Yük, parola veya gizli anahtar benzeri alanlar içeriyorUyarıYükü, token'ı elinde tutan herkes okuyabilir

İmzaları doğrulamak

Algoritmalar ve anahtarlar
algTürDoğrulama için gereken anahtar
HS256, HS384, HS512SHA-2 ile HMACPaylaşılan gizli anahtar
RS256, RS384, RS512RSA PKCS#1 v1.5RSA açık anahtarı (PEM veya JWK)
PS256, PS384, PS512RSA-PSSRSA açık anahtarı (PEM veya JWK)
ES256, ES384, ES512ECDSAEşleşen eğri üzerinde bir EC açık anahtarı (PEM veya JWK)

HMAC algoritmalarında aynı gizli anahtar hem imzalar hem doğrular; dolayısıyla doğrulayabilen herkes token da üretebilir. Asimetrik algoritmalar bu ikisini birbirinden ayırır: ihraççı özel anahtarı kendinde tutar ve açık anahtarı çoğu zaman bir JWKS belgesi olarak yayımlar, böylece herhangi bir servis token üretme yetkisi olmadan doğrulama yapabilir. Token'ları birçok servisin tükettiği sistemlerde asimetrik anahtarlar daha güvenli tasarımdır. Anahtar değişimini de kolaylaştırırlar, çünkü korunması gereken tek şey ihraççıdaki özel anahtardır.

Doğrulama, tarayıcının WebCrypto gerçekleştirimini kullanır. Başarılı bir doğrulama yalnızca token'ın eşleşen anahtarla imzalandığını kanıtlar; iss ve aud değerlerini ya da token'ın iptal edilip edilmediğini kontrol etmez, bunlar alıcı sunucunun işi olmayı sürdürür. Bu yüzden olumlu bir doğrulama sonucu tek başına “bu token benim API'm için geçerli” anlamına gelmez. Araç ayrıca bir JWKS adresini getirmez ve başlıktaki kid değerini sizin için çözümlemez; eşleşen anahtarı kendiniz yapıştırırsınız.

Yaygın JWT hataları

  • Algoritmayı token'ın kendisinden kabul etmek. Beklenen algoritmaları sunucuda yapılandırın; seçimi asla alg başlığına bırakmayın, none ve anahtar karıştırma saldırıları tam olarak böyle çalışır.
  • Zayıf HMAC gizli anahtarları. Kısa ya da tahmin edilebilir anahtarlar tek bir token'dan yola çıkılarak çevrimdışı kaba kuvvetle kırılabilir. En az hash çıktısı kadar rastgele bayt kullanın, örneğin HS256 için 32 bayt.
  • Son kullanma tarihinin olmaması ya da çok uzun ömürler. Token'lar kolayca iptal edilemez; bu yüzden erişim token'larını kısa ömürlü tutun ve uzun oturumlar için yenileme token'ları kullanın.
  • Yükte hassas veri taşımak. Yükteki her şey, token'ı elinde tutan herkes tarafından okunabilir; buna tarayıcı eklentileri, ara vekiller ve günlük kayıtları da dahildir.
  • aud değerini kontrol etmemek. Bir servis için verilmiş bir token, yalnızca aynı ihraççıya güveniyor diye başka bir servis tarafından kabul edilmemelidir.
  • Token'ları betiklerin okuyabileceği yerlerde saklamak. localStorage içindeki token'lar her XSS açığına açıktır; tarayıcı oturumlarında HttpOnly çerezler bunu önler.

CSP rehberi, tarayıcıda saklanan token'ları koruyan betik enjeksiyonu sınırlamasını ayrıntılı olarak ele alır. Token'ların içindeki JSON'u daha yakından incelemek için JSON Araçları çözülmüş yükleri okunaklı biçimde yazdırabilir. Her iki araç da girdiyi yalnızca tarayıcınızda işler, dolayısıyla üzerinde çalıştığınız token sayfadan hiç çıkmaz. Bir token'ın gizli anahtarını ya da açık anahtarını üretmeniz gerekiyorsa, rastgele baytları platformunuzun güvenli üreticisinden alın ve sonucu bir sır yöneticisinde saklayın.

SSS

Buraya bir token yapıştırmak güvenli mi?

Token ve anahtarlar yalnızca tarayıcınızda işlenir; hiçbir yere yüklenmez ve URL'ye konmaz. Canlı bir token yine de erişim sağladığı için, mümkün olduğunda süresi dolmuş ya da test token'larını tercih edin.

Çözücü şifrelenmiş bir JWT okuyabilir mi?

Hayır. Şifrelenmiş token'lar (JWE) beş bölümden oluşur ve çözme anahtarını gerektirir. Çözücü, üç bölümden oluşan imzalı token'ları (JWS) işler.

Doğru gizli anahtarla doğrulama neden başarısız oluyor?

Anahtarın base64url olarak saklanıp saklanmadığını (öyleyse seçeneği işaretleyin), token'ın değiştirilip değiştirilmediğini ve başlıktaki algoritmanın anahtar türüyle eşleşip eşleşmediğini kontrol edin.

alg none ne anlama gelir?

Token'ın imzası yoktur. Sunucular kimlik doğrulama için imzasız token'ları asla kabul etmemelidir; çözücü bunları kritik olarak işaretler.

Token'ım yeni verildiği hâlde neden süresi dolmuş görünüyor?

Cihazınızın ya da ihraççının saati yanlıştır veya exp değeri saniye yerine milisaniye olarak yazılmıştır. iat değeriyle karşılaştırın.

Anahtar olmadan bir token'ı çözebilir miyim?

Evet. Başlık ve yük yalnızca base64url ile kodlanmıştır. Anahtar, token'ın gerçek olduğunu doğrulamak için gereklidir.

JWKS nedir?

Bir JSON Web Key Set; genellikle bir kimlik sağlayıcı tarafından yayımlanan, bir ya da daha fazla açık anahtar içeren bir JSON belgesidir. kid değeri token başlığındakiyle eşleşen anahtarı JWK olarak çözücüye kopyalayın.

HS256 mı yoksa RS256 mı kullanmalıyım?

Token'ları tek bir servis hem veriyor hem doğruluyorsa HS256 yeterlidir. Token'ları birden fazla servis doğruluyorsa RS256 ya da ES256 daha iyidir, çünkü onların yalnızca açık anahtara ihtiyacı olur.

Bir JWT iptal edilebilir mi?

Kendi başına hayır. Kısa ömürler kullanın; anında iptal gerektiğinde sunucuda jti değerlerinden oluşan bir engelleme listesi ya da oturum durumu tutun.

Kaynaklar