Ana içeriğe geç

JWT

JSON Web Token

Okunuşu
cey-dabılyu-ti ya da cot
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/jwt

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.

Bir bakışta

JWT, noktalarla birleştirilmiş üç Base64URL bölümünden oluşur: imzalama algoritmasını belirten bir header, sub ve exp gibi claim'leri taşıyan bir payload ve ikisinden bir gizli anahtarla hesaplanan bir imza.HeadereyJhbGciOi…"alg": "HS256","typ": "JWT"imzalama algoritmasıPayloadeyJzdWIiOi…"sub": "42","name": "Ada","exp": 1767225600claim'ler: herkes okuyabilirİmzaSflKxwRJSM…HMAC-SHA256(header.payload,secret)değişmediğini kanıtlar..
Header ve payload'ı herkes çözebilir, bu yüzden içine sır koymayın; imza yalnızca hiçbir şeyin değişmediğini kanıtlar.

Ö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ğrulamakjavascript
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.

Sık karşılaştırılanlar

İlgili sayfalar

Kaynaklar

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar