JWT Çözücü rehberi
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.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9 header: {"alg":"HS256","typ":"JWT"}
.eyJzdWIiOiIxMjMiLCJleHAiOjE3NTc5MDAwMDB9 payload: {"sub":"123","exp":1757900000}
.3q2-7wrBx... signature: HMAC-SHA256 over header.payloadBaş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.
JWT Çözücü nasıl kullanılır
- JWT Çözücü aracını açın ve bir token yapıştırın. Token siz yazarken tarayıcınızda çözülür.
- Başlığı ve yükü biçimlendirilmiş JSON olarak okuyun; altındaki algoritma, son kullanma ve talep notlarını da gözden geçirin.
- İ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.
- İmzayı doğrula düğmesine basın ve sonucu okuyun.
Gerçek token'ları parola gibi görün
Kayıtlı talepler
| Talep | Ad | Anlamı |
|---|---|---|
iss | İhraççı | Token'ı kimin oluşturup imzaladığı |
sub | Özne | Token'ın kim ya da ne hakkında olduğu, çoğu zaman bir kullanıcı kimliği |
aud | Hedef kitle | Token'ın kime yönelik olduğu; alıcıların bunu kontrol etmesi gerekir |
exp | Son kullanma zamanı | 1970-01-01 UTC'den bu yana geçen saniye; bundan sonra token reddedilmelidir |
nbf | Şu zamandan önce geçersiz | Token'ın bu andan önce reddedilmesi gereken zaman |
iat | Veriliş zamanı | Token'ın ne zaman oluşturulduğu |
jti | JWT kimliği | Benzersiz tanımlayıcı; iptal listeleri ve tekrar saldırısı korumasında işe yarar |
{
"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
| Not | Önem | Nedeni |
|---|---|---|
| alg değeri “none” | Kritik | Token imzasızdır; bunu kabul etmek herkesin istediği talebi uydurmasına izin verir |
| Başlıkta alg yok | Kritik | Kü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 yok | Uyarı | 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 gelecekte | Uyarı | İhraççının saati büyük olasılıkla yanlış |
| Yük, parola veya gizli anahtar benzeri alanlar içeriyor | Uyarı | Yükü, token'ı elinde tutan herkes okuyabilir |
İmzaları doğrulamak
| alg | Tür | Doğrulama için gereken anahtar |
|---|---|---|
HS256, HS384, HS512 | SHA-2 ile HMAC | Paylaşılan gizli anahtar |
RS256, RS384, RS512 | RSA PKCS#1 v1.5 | RSA açık anahtarı (PEM veya JWK) |
PS256, PS384, PS512 | RSA-PSS | RSA açık anahtarı (PEM veya JWK) |
ES256, ES384, ES512 | ECDSA | Eş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
algbaşlığına bırakmayın,noneve 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.
localStorageiç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.