yigityalim
projelerel kitabılabişe alpaylaş
xgithub
siteprojelerel kitabılaboratuvardeğişiklik günlüğü
hakkındakullanımlarşimdiişe alpaylaş
diğerxgithublinkedine-posta
metarssllms.txtsitemap
© 2026 Yiğit Yalım. Tüm hakları saklıdır.
/
Laboratuvarlara Dön
10 May 2026·auth

JWT Decoder + Doğrulayıcı

JSON Web Token'ı yapıştır, header / payload / signature parçalara ayır, HMAC secret ile imza doğrula. Süresi dolmuş, henüz geçerli olmayan ve "alg none" tehlikeli token'ları otomatik işaretler.

jwt · jose · hmac · hs256

ÖncekiJSON FormatterSonrakiJWT Generator

JWT (JSON Web Token) — header.payload.signature formatında, base64url ile encode edilmiş, isteğe bağlı imzalı. Üç bölümün ne içerdiğini ve imzanın ne işe yaradığını anlamak modern auth'un %80'idir.

Bu lab token'ı yapıştır → 3 parçaya böl, base64url-decode et, JSON parse et. HMAC-SHA256 secret'ını yapıştır → imzayı tarayıcıda doğrula. exp, nbf, iat claim'lerini insan-okunur tarih olarak çevir, expired ise vurgula. alg: "none" durumunu kırmızı banner ile işaretle.

JwtDecoder — decode + verify, all in browser
jwt token
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IllpxJ9pdCBZYWzEsW0iLCJpYXQiOjE3Nzg2OTk2MzUsImV4cCI6MTc3ODcwMzIzNX0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
header
36 chars
{
  "alg": "HS256",
  "typ": "JWT"
}
payload
103 chars
{
  "sub": "1234567890",
  "name": "Yiğit Yalım",
  "iat": 1778699635,
  "exp": 1778703235
}
time-based claims
valid · expires in 1h
exp
17787032352026-05-13 20:13:55 UTC+00:00
iat
17786996352026-05-13 19:13:55 UTC+00:00
signature verify · HS256

Üç parça

JWT şu üç parçanın . ile birleştirilmiş halidir:

  1. Header (kırmızı) — algoritma + token tipi:
    { "alg": "HS256", "typ": "JWT" }
  2. Payload (mor) — claim'ler. sub (subject), iat (issued at), exp (expires at) en yaygınları:
    { "sub": "user-123", "iat": 1745731600, "exp": 1745735200 }
  3. Signature (mavi) — HMAC(secret, base64url(header) + "." + base64url(payload)). Ya da RSA/ECDSA. Imzayı doğrulamak için aynı secret/public key gerekir.

Doğrulamadan asla güvenme

Üç adım büyük tehlike kaynağı:

  1. alg: "none" kabul etmek — bazı kütüphaneler (eski jsonwebtoken v0.x dahil) bu algorithm'i kabul ederdi; saldırgan imzasız token üretip kabul ettirebilirdi. Modern kütüphaneler reddeder ama verify({ algorithms: ["HS256"] }) gibi explicit allowlist kullan.

  2. Algorithm confusion — server RS256 (asymmetric) bekliyor ama saldırgan public key'i secret olarak gönderip HS256'ya geçer. Yine algorithms allowlist'i.

  3. Sadece decode etmek, doğrulamamak — jwt.decode() (verify değil) sadece base64url-decode yapar, signature'a bakmaz. Production'da asla decode-only kullanma; her zaman jwt.verify(token, secret, options).

exp vs nbf vs iat

ClaimAnlamSunucu kontrolü
iatIssued atSadece logging — geleceğe ait olamaz
nbfNot beforenow < nbf ise reddet
expExpires atnow >= exp ise reddet

Saat farkı için ±60-300 saniye tolerance kabul etmek yaygın (clock skew). Ama 1 saatten fazla tolerance auth bypass riski.

Token storage

  • HttpOnly + Secure + SameSite=Strict cookie (default güvenli)
  • localStorage / sessionStorage değil — XSS ile çalınır
  • Web Worker memory de bir seçenek ama complex