JWT Decoder

JSON Web Token (JWT) header ve payload'unu çözün. Algoritma, expiry ve diğer bilgileri görüntüleyin. Tarayıcıda anında çalışır, kayıt gerekmez, ücretsizdir.

JWT Decoder

RFC 7519

JWT (JSON Web Token) Nedir?

JWT, modern web uygulamalarında kullanıcı kimlik doğrulama ve yetkilendirme için kullanılan, RFC 7519 standardıyla tanımlanmış bir token formatıdır. İçinde JSON verisi taşır, kompakt ve URL-safe'dir. API'lerde, OAuth flow'larında, mobil uygulamalarda yaygın olarak görürsünüz.

JWT'nin temel mantığı şudur: sunucu, kullanıcının kim olduğunu kanıtlayan imzalı bir token üretir, kullanıcı bu token'ı her istekte gönderir, sunucu imzayı doğrulayıp "evet bu gerçekten bizim verdiğimiz token" diye onaylar. Stateless mimari için idealdir, sunucuda session saklamak gerekmez.

JWT Yapısı — 3 Bölüm

Bir JWT, nokta (.) ile ayrılmış 3 base64URL kodlanmış parçadan oluşur:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ
.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

1. Header (Başlık)

Token'ın türünü ve imzalama algoritmasını belirtir:

{
  "alg": "HS256",
  "typ": "JWT"
}

Yaygın algoritmalar:

  • HS256 (HMAC-SHA256): Simetrik, paylaşılan secret kullanır
  • RS256 (RSA-SHA256): Asimetrik, public/private key çifti
  • ES256 (ECDSA): RSA'dan daha verimli eliptik eğri
  • none: İmza YOK (asla production'da kullanmayın)

2. Payload (Yük)

Asıl veri burada. Claims (iddialar) denilen alanlar:

{
  "sub": "1234567890",
  "name": "Ahmet Yılmaz",
  "role": "admin",
  "iat": 1716480000,
  "exp": 1716483600
}

Standart claim'ler (RFC 7519):

  • iss (issuer): Token'ı kim üretti
  • sub (subject): Token kime ait
  • aud (audience): Token hangi servis için
  • exp (expiration): Geçerlilik bitiş zamanı (UNIX timestamp)
  • nbf (not before): Geçerlilik başlangıcı
  • iat (issued at): Üretildiği zaman
  • jti (JWT ID): Benzersiz token kimliği

3. Signature (İmza)

Header + Payload, secret veya private key ile imzalanır. İmza, token'ın değiştirilmediğini kanıtlar. Eğer payload'a "role: admin" eklerseniz ama imza eski kalırsa, doğrulama başarısız olur.

JWT'nin Avantajları

  • Stateless: Sunucu session saklamaz, ölçeklenebilir
  • Kompakt: URL, header veya cookie'de taşınabilir
  • Self-contained: Tüm bilgi token'da var, ek DB sorgusu gerekmez
  • Cross-domain: Farklı domain'ler arası kimlik aktarımı kolay
  • Standardized: Tüm büyük diller için kütüphaneler var

Güvenlik Riskleri ve Doğru Kullanım

  • Payload şifrelenmemiştir: Sadece encode edilmiş. İçinde şifre, kredi kartı gibi hassas veri OLMASIN
  • Kısa süre kullanın: exp claim'i ile 15-60 dakika ideal, refresh token ile uzatın
  • HTTPS zorunlu: HTTP'de gönderilen JWT yolda dinlenebilir
  • "alg: none" kabul etmeyin: Bazı kütüphaneler buna izin verir, güvenlik açığı
  • Secret rotasyon: HS256 kullanıyorsanız secret'ı 3-6 ayda bir değiştirin
  • Token revocation zor: Kullanıcıyı zorla logout yapmak için ek mekanizma gerekir (blacklist)

JWT Ne Zaman Kullanmamalı?

JWT her durum için ideal değildir:

  • Anlık iptal gerekiyorsa: Session yöntemi daha esnektir
  • Çok hassas işlemler: Banking için klasik session+CSRF token tercih edin
  • Çok büyük payload: Token şişer, her istek bandwidth tüketir
  • Bilgi gizliliği kritik: JWT base64 ile decode edilebilir, içeriği herkes görür

Sıkça Sorulan Sorular

JWT decode etmek güvenlik riski mi?

Hayır, JWT zaten public bilgi içerir. Decode etmek sadece içeriği okumaktır, doğrulamak değildir. Hassas verilerinizi (şifre, kart) JWT'ye koymadığınız sürece decode edilmesi sorun değildir. Aracımız sadece browser'da çalışır, hiçbir veri sunucuya gönderilmez.

JWT imzasını kırabilir miyim?

Modern HS256/RS256 algoritmaları kriptografik olarak güvenlidir. Brute force ile kırmak milyonlarca yıl alır. Ama zayıf secret kullanılan HS256'ler dictionary attack ile kırılabilir - bu yüzden 256-bit random secret kullanın. RS256/ES256 daha güvenli alternatiflerdir.

JWT ne kadar süre geçerli olmalı?

Access token için 15-60 dakika, refresh token için 7-30 gün önerilir. Kısa süre güvenlik açısından daha iyi - token çalınırsa zarar limitli. Mobil uygulamalarda kullanıcı deneyimi için biraz daha uzun (1-7 gün) tercih edilebilir, refresh token mekanizması ile dengelenir.

JWT'yi cookie'de mi header'da mı taşımalıyım?

Her ikisinin avantajları var. HTTP Authorization header (Bearer token) en yaygındır, CSRF'e karşı korumalı. Cookie HTTPOnly + Secure + SameSite ile kullanılırsa XSS'e karşı daha güvenli. SPA'larda header, server-rendered uygulamalarda cookie tercih edilir. CSRF token ile birlikte cookie de güvenlidir.

JWT'yi nasıl iptal ederim (logout)?

JWT stateless olduğu için doğrudan iptal edilemez - server o token'ı tanımıyor. Çözümler: (1) Kısa süreli token + refresh token, refresh'i sunucuda iptal et. (2) Token blacklist DB'de tut, her istekte kontrol et (stateless avantajını kısmen kaybedersin). (3) Kullanıcı şifresini değiştirince yeni secret üret, eski tokenlar geçersiz olur.

İlgili Araçlar

İlgili Araçlar