JWT Kod Çözücü
JSON Web Token'larını çöz ve incele
JWT Token
JWT (JSON Web Token) Nedir?
JSON Web Token (JWT), RFC 7519'da tanımlanan kompakt ve URL güvenli bir token formatıdır. Bir dizi claim'i JSON nesnesi olarak kodlar, ardından imzalar — ve isteğe bağlı olarak şifreler — böylece alıcı verilerin değiştirilmediğini doğrulayabilir. JWT'ler, REST API'lerde, tek oturum açma sistemlerinde ve mikro hizmet yetkilendirmesinde durumsuz kimlik doğrulamanın fiili standardıdır.
JWT Anatomisi: Header · Payload · Signature
Her JWT, noktalarla ayrılmış üç base64url kodlu segmentten oluşur. Header ve Payload sade JSON'dur — herkes tarafından okunabilir — Signature ise yalnızca doğru anahtar ile doğrulanabilen kriptografik bir değerdir.
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJ1c2VyMTIzIiwibmFtZSI6IkFsaWNlIiwicm9sZSI6ImFkbWluIiwiaWF0IjoxNzE3MjAwMDAwLCJleHAiOjE3MTcyMDM2MDB9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
{
"alg": "HS256",
"typ": "JWT"
}{
"sub": "user123",
"name": "Alice",
"role": "admin",
"iat": 1717200000,
"exp": 1717203600
}Neden JWT Dekoder Kullanılır?
Ham JWT'ler rastgele metin gibi görünür. Bu araç, Header ve Payload'u anında biçimlendirilmiş JSON olarak gösterir; böylece tek bir kod satırı yazmadan claim'leri inceleyebilir, son kullanma sürelerini kontrol edebilir ve algoritma seçimlerini denetleyebilirsiniz.
Standart JWT Claim Referansı
RFC 7519, yedi kayıtlı claim adı tanımlar. Bunlar zorunlu değildir, ancak birlikte çalışabilirlik için kullanımları güçlü biçimde tavsiye edilir. Payload'a istediğiniz özel claim'leri ekleyebilirsiniz.
| Claim | Açıklama | Tür |
|---|---|---|
| iss | Yayımlayan — Token'ı kimin yayımladığını tanımlar — ör. kimlik doğrulama sunucunuzun URL'si veya uygulama adı. | string |
| sub | Konu — JWT'nin ilgili olduğu özneyi tanımlar — genellikle bir kullanıcı kimliği veya hizmet hesabı. | string |
| aud | Hedef Kitle — Hedeflenen alıcıları tanımlar. Alıcı taraf, bunun kendi tanımlayıcısıyla eşleştiğini doğrulamalıdır. | string | string[] |
| exp | Son Kullanma Zamanı — Token'ın bu zamandan sonra kabul edilmemesi gereken Unix zaman damgası. Çalınan bir token'ın zararını sınırlamak için her zaman ayarlayın. | number |
| nbf | Önce Değil — Token'ın bu zamandan önce kabul edilmemesi gereken Unix zaman damgası. Gelecek tarihli token'lar planlamak için kullanışlıdır. | number |
| iat | Yayımlanma Zamanı — Token'ın yayımlandığı Unix zaman damgası. Token yaşını hesaplamak için kullanılır. | number |
| jti | JWT ID — Token için benzersiz bir tanımlayıcı. Kullanılan JTI değerlerini sunucu tarafında depolayıp kontrol ederek iptal işlemini mümkün kılar. | string |
JWT İmzalama Algoritmaları
alg header claim'i, token'ı imzalayan algoritmayı bildirir. Seçim, güvenliği, performansı ve üçüncü taraf hizmetlerin özel anahtar olmadan token'ları doğrulayıp doğrulayamayacağını etkiler.
| Algoritma | Aile | Anahtar türü | Notlar |
|---|---|---|---|
| HS256 | HMAC | Symmetric | En yaygın. Paylaşılan gizli anahtar — gizliye sahip olan herkes imzalayabilir ve doğrulayabilir. |
| HS384 | HMAC | Symmetric | Daha güçlü HMAC varyantı; orta düzey performans maliyeti. |
| HS512 | HMAC | Symmetric | En güçlü HMAC varyantı. |
| RS256 | RSA | Asymmetric | En yaygın kullanılan asimetrik algoritma (Google, Auth0, Okta). Açık anahtar, özel anahtar olmadan doğrular. |
| RS384 | RSA | Asymmetric | Daha yüksek güvenlikli RS varyantı. |
| RS512 | RSA | Asymmetric | En güçlü RS varyantı. |
| ES256 | ECDSA | Asymmetric | Eliptik eğri — RSA'dan daha kısa imzalar, mobil ve IoT'da popüler. |
| PS256 | RSA-PSS | Asymmetric | RSA-PSS: PKCS1v1.5 tabanlı RS256'dan daha modern ve güvenli. |
| none | — | — | İmza yok — kritik derecede tehlikeli. Üretimde alg: none içeren token'ları asla kabul etmeyin. |
Güvenlik Değerlendirmeleri
Bir JWT'yi çözmek her zaman güvenlidir. Uygun imza doğrulaması olmadan bir JWT'ye güvenmek güvenli değildir. Uygulamanızda token tüketirken bu kuralları aklınızda bulundurun.
- –Geliştirici araçlarında veya bu araçta bir JWT'yi çözmek ve incelemek
- –Token ömrünü anlamak için exp, iat ve nbf kullanmak
- –Hata ayıklama için payload claim'lerini kaydetmek (hassas kişisel verileri hariç tutun)
- –Token'ın nasıl imzalandığını anlamak için alg header'ını okumak
- –Sunucu tarafında imzayı doğrulamadan payload'daki claim'lere güvenmek
- –alg: none içeren token'ları kabul etmek — bu, hiç imza olmadığı anlamına gelir
- –Yüksek güvenlikli uygulamalarda erişim token'larını localStorage'da saklamak (httpOnly çerezleri tercih edin)
- –Hassas izinler taşıyan token'lar için exp'yi çok uzak bir geleceğe ayarlamak
Yaygın Kullanım Senaryoları
Kodda JWT Çözme
Header ve Payload base64url kodludur — sadece kodlamayı tersine çevirin. Base64url, +'yı - ile, /'yi _ ile değiştirir ve = dolgusunu çıkarır. Yalnızca Signature gizli anahtara ihtiyaç duyar.
function decodeJWT(token) {
const [, payload] = token.split('.')
const json = atob(payload.replace(/-/g, '+').replace(/_/g, '/'))
return JSON.parse(json)
}const [, payload] = token.split('.')
const decoded = JSON.parse(
Buffer.from(payload, 'base64url').toString()
)import base64, json
def decode_jwt(token):
payload = token.split('.')[1]
padding = '=' * (-len(payload) % 4)
return json.loads(base64.urlsafe_b64decode(payload + padding))TOKEN="eyJhbGc..." echo $TOKEN | cut -d. -f2 | base64 -d 2>/dev/null | jq .