# JWT (JSON Web Token)

Adres: https://softwaredictionary.org/tr/terimler/jwt
Kategori: Güvenlik
Son güncelleme: 2026-09-29
Okunuşu: cey-dabılyu-ti ya da cot

Kısaca: JWT, kullanıcı kimliği ve son kullanma zamanı gibi bilgileri taşıyan, imzalı ve kompakt bir token'dır; sunucunun oturum aramadan istekleri doğrulamasını sağlar.

## JWT nedir?

JSON Web Token, noktalarla ayrılmış ve Base64URL ile kodlanmış üç bölümden oluşan bir metindir: imzalama algoritmasını belirten bir başlık (header), `sub` (kullanıcı kimliği) ve `exp` (son kullanma zamanı) gibi claim'leri içeren bir payload ve bir imza. İmza bir gizli anahtar ya da özel anahtarla oluşturulur; bu yüzden başlıkta veya payload'da yapılan her değişiklik token'ı geçersiz kılar.

Tipik bir giriş akışında sunucu, kullanıcının kimlik bilgilerini denetledikten sonra bir JWT üretir; istemci de sonraki isteklerde, genellikle `Authorization: Bearer <token>` başlığıyla bunu geri gönderir. Sunucu imzayı ve son kullanma zamanını doğrular, ardından bir oturum deposuna sormadan claim'lere güvenir. Bu durum JWT'leri API'ler, mikro servisler ve OAuth ile OpenID Connect üzerinden tek oturum açma (SSO) için popüler kılar.

JWT, bir festivaldeki, müdahale edilirse belli olan bileklik gibidir: görevliler bilet ofisini aramadan bileği bir bakışta kontrol edebilir, ama üzerinde yazanı herkes okuyabilir. Payload yalnızca kodlanmıştır, şifrelenmemiştir; bu yüzden içine asla parola ya da başka sırlar koymayın.

Sunucu taraflı oturumlarla karşılaştırıldığında JWT'ler durumsuzdur (stateless); bu da ölçeklemeyi kolaylaştırır ama süresi dolmadan iptal etmeyi zorlaştırır. İyi uygulama, erişim token'larını kısa ömürlü tutmak, yenilerini almak için refresh token'lar kullanmak, imzayı her zaman açıkça belirlenmiş izinli algoritmalar listesine göre doğrulamak ve token'ları enjekte edilen betiklerin kolayca okuyamayacağı yerlerde, örneğin `HttpOnly` çerezlerde saklamaktır.

## Önemli noktalar

- JWT'nin üç bölümü vardır: header, payload ve imza.
- İmza, token'ın değiştirilmediğini kanıtlar.
- Payload'ı herkes okuyabilir; bu yüzden sır içermemelidir.
- JWT'ler durumsuzdur ve iptal edilmesi zordur; bu yüzden kısa ömürlü tutun.
- İmzayı her zaman doğrulayın ve izin verilen algoritmaları kısıtlayın.

## Örnek: Node.js'te JWT imzalamak ve doğrulamak

```javascript
import jwt from "jsonwebtoken";

const secret = process.env.JWT_SECRET;

// After a successful login: sign a short-lived token
const token = jwt.sign({ sub: user.id, role: "editor" }, secret, {
  expiresIn: "15m",
});

// On each request: check signature, algorithm, and expiry
// (throws an error if the token was altered or has expired)
const claims = jwt.verify(token, secret, { algorithms: ["HS256"] });
console.log(claims.sub);
```

## Sık sorulan sorular

**JWT ile oturum çerezleri arasındaki fark nedir?**

Oturum çerezinde oturum verilerini sunucu saklar ve çerez yalnızca aranması gereken rastgele bir kimlik taşır. JWT ise kullanıcının claim'lerini imzalı token'ın içinde taşır; bu yüzden arama gerekmez, ancak süresi dolmadan iptal etmek daha zordur. JWT de bir çerezde saklanabilir; yani ikisi birbirini dışlamaz.

**JWT şifreli midir?**

Standart imzalı bir JWT şifreli değildir; payload'ını herkes çözüp okuyabilir. İmza yalnızca kurcalamayı önler; şifreli token'lar JWE adlı ayrı bir biçim kullanır.

**Tarayıcıda JWT'yi nerede saklamalıyım?**

`HttpOnly` ve `Secure` bir çerez, token'ı JavaScript'in erişiminden uzak tutar ve XSS yoluyla çalınmasını önler; ancak bu durumda CSRF koruması gerekir. `localStorage`'da saklamak CSRF'i önler ama token'ı sayfada çalışan her betiğe açık bırakır.

## Kaynaklar

- [RFC 7519: JSON Web Token (JWT)](https://www.rfc-editor.org/rfc/rfc7519.html)

---

Software Dictionary: https://softwaredictionary.org/tr · https://softwaredictionary.org/tr/llms.txt
