JWT Dekoderi

Bir JWT (noktalarla ayrılmış, base64url ile kodlanmış üç parçadan oluşan) yapıştırın; çözücü başlığı, yükü ve imzayı çözer ve düzgün biçimde gösterir; ayrıca tespit edilen algoritmayı, tokenin yerel saatinize göre son kullanma zamanını ve nbf (not-before), iat (issued-at) ile exp (expiry) değerlerinin tutarlı olup olmadığını da gösterir. Gizli anahtarınız veya açık anahtarınız varsa isteğe bağlı olarak imza doğrulaması yapabilirsiniz.

Bir JWT nasıl çözülür

  1. 1

    Tokeni yapıştırın

    `.` ile ayrılmış üç base64url dizesi (başlık.yük.imza).

  2. 2

    Çözülen başlığı okuyun

    Algoritma, tip ve anahtar ID'si (`kid`). Algoritma, doğrulama için hangi anahtar türünün gerekenini belirtir.

  3. 3

    Yükü okuyun

    Standart iddialar (`iss`, `sub`, `aud`, `exp`, `iat`, `nbf`, `jti`) ve uygulamanız tarafından düzenlenmiş herhangi bir özel iddia.

  4. 4

    Doğrulayın (isteğe bağlı)

    İmzanın geçerliliğini doğrulamak için HMAC gizli değerini (HS256/384/512 için) veya kamusal anahtarı (RS256, ES256 vb. için) belirtin.

JWT’nin Anatomisi

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkFsaWNlIiwiaWF0IjoxNjAwMDAwMDAwfQ
.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

Her segment, standart Base64 yerine Base64URL formatında kodlanmıştır. Başlık {"alg":"HS256","typ":"JWT"} gibi bir JSON verisidir; yük {"sub":"1234567890","name":"Alice","iat":1600000000} gibi bir JSON verisidir; imza ise header.payload için kullanılan HMAC veya RSA imzasıdır.

Standart Talepler (RFC 7519)

Talep Ad Notlar
iss Veren Tokeni kimin ürettiği
sub Özne Tokenin kimi ilgilendirdiği
aud Hedef kitle Tokenin kimin için olduğu
exp Son kullanma zamanı Unix zaman damgası; bu zamandan sonra reddedilir
nbf Şu andan önce değil Unix zaman damgası; bu zamandan önce reddedilir
iat Düzenlenme zamanı Tokenin oluşturulduğu andaki Unix zaman damgası
jti JWT kimliği İptal listeleri için benzersiz tanımlayıcı

Desteklenen Algoritmalar

alg değeri Anahtar türü
HS256/HS384/HS512 Paylaşılan HMAC gizli anahtarı
RS256/RS384/RS512 RSA açık anahtarı
ES256/ES384 ECDSA açık anahtarı
PS256/PS384 RSA-PSS açık anahtarı
EdDSA / Ed25519 Edwards eğrisi
none Buna asla güvenmeyin, imzalanmamış tokenler

alg: none tuzağı

İlk JWT kütüphaneleri "alg": "none" tokenlerine izin veriyor ve bunları olduğu gibi geçerli kabul ediyordu. Her zaman şunları yapın:

  • Uygulamanızın kabul ettiği algoritmaları beyaz listeye alın.
  • alg: none’ı koşulsuz olarak reddedin.
  • Doğrulama kodunuz RS256 beklerken alg: HS256’yı reddedin (“algoritma karıştırma” saldırısı).

JWT Ne Değildir

  • Şifreli değildir. Başlık ve yük base64 ile kodlanmıştır ve bu kod kolayca çözülebilir. Gizli bilgileri JWE ile sarmalamadan bir JWT’ye asla koymayın.
  • Varsayılan olarak iptal edilemez. Bir JWT verildikten sonra exp zamanına kadar geçerlidir. İptal için bir kara liste ya da kısa süreli geçerlilik artı yenileme tokenleri gerekir.
  • Her kullanım durumunda oturum çerezinin yerini tutmaz. Sunucu tarafında saklanan opak tokenler çoğu zaman daha basit ve daha güvenlidir.

Yaygın Hatalar

  • Başlığa güvenmek. kid ve alg değerleri tokenin kendisinden gelir. Ele geçirilmiş bir sunucu bunları keyfî olarak ayarlayabilir; her zaman sabit bir listeye karşı doğrulayın.
  • nbf ve iat sapmasını yok saymak. Saat kayması nedeniyle iat > now durumu oluşabilir. Küçük bir tolerans bırakın (30–60 saniye).
  • JWT’lerin tamamını günlüğe yazmak. Yük çoğunlukla kullanıcı kimlikleri, e-posta adresleri ve izinler içerir, bunlar stdout’a düşmemesi gereken PII verileridir.
  • Zayıf bir gizli anahtarla HS256 kullanmak. 16 karakterlik bir gizli anahtar dakikalar içinde kaba kuvvetle kırılabilir. En az 256 bit rastgele entropi kullanın.

Sık Sorulan Sorular

Hayır. Kod çözme işlemi tarayıcınızda gerçekleşir. Token yerel olarak saklanır; bu özellikle önemli çünkü JWT’ler genellikle oturum verilerini, kullanıcı kimliklerini ve izinleri içermektedir.

Evet. Paylaşılan HMAC gizli anahtarını veya PEM ile kodlanmış açık anahtarı yapıştırırsanız doğrulama tarayıcınızda gerçekleşir. Anahtar cihazınızdan asla çıkmaz.

Bu, tokenin imzalanmamış olduğu anlamına gelir. Üretim ortamında böyle tokenleri asla kabul etmeyin; kolayca sahte üretilebilirler. Birçok önemli CVE, tam olarak varsayılan olarak alg: none’ı kabul eden kütüphanelerle ilgiliydi.

JWT imzası gizliliği değil, doğruluğu kanıtlar. Başlık ve yük, tersine çevrilebilir bir şekilde Base64 URL kodlaması kullanır. Gizlilik açısından JWT etrafında JWE (JSON Web Şifreleme) kullanın veya hassas verileri yük içine yerleştirmeyin.

İlgili Araçlar

Araç diğer dillerde mevcuttur