JWT (JSON Web Token): imzalı, taşınabilir kimlik bilgisi
Sözlük

JWT (JSON Web Token): imzalı, taşınabilir kimlik bilgisi

Hazırlayan: Mindset Institute EditörlüğüGüncellendi: 3 dk okuma

JWT'nin başlık, yük ve imzadan oluşan yapısını, kimlik doğrulamadaki rolünü, oturumdan farkını ve sık güvenlik hatalarını örnekle öğrenin.

JWT nedir?

JWT (JSON Web Token), taraflar arasında bilgiyi (claim, iddia) JSON biçiminde taşıyan ve dijital olarak imzalanmış kompakt bir jetondur. En yaygın kullanımı, kullanıcı giriş yaptıktan sonra sunucunun verdiği ve her istekte birlikte gönderilen kimlik ve yetki bilgisidir.

Jetonun özelliği, kendi içinde bilgi taşımasıdır. Sunucu her istekte oturum kaydını veri tabanında aramak yerine, jetonun imzasını doğrular ve içindeki bilgiye güvenir. Bu nedenle özellikle birden çok servisten oluşan API mimarilerinde sık tercih edilir.

Yapısı: başlık, yük, imza

JWT, noktalarla ayrılmış birbirine bağlı bölümlerden oluşur: • Başlık (header): Jetonun türünü ve imzalama algoritmasını belirtir. • Yük (payload): İddiaları taşır. Standart alanlardan bazıları jetonu kimin verdiğini (iss), kimin için olduğunu (sub), hangi hedef için geçerli olduğunu (aud) ve ne zaman sona ereceğini (exp) gösterir. Uygulamaya özel alanlar, örneğin kullanıcı rolü de eklenebilir. • İmza (signature): Başlık ve yükün gizli bir anahtarla (ortak anahtarlı HMAC yöntemi) ya da özel anahtarla (açık anahtarlı yöntemler) imzalanmasıyla oluşur.

Başlık ve yük bölümleri URL için güvenli bir metin kodlamasıyla yazılır. Bu bir şifreleme değildir: herhangi biri jetonu çözüp içeriğini okuyabilir. İmza yalnızca içeriğin sonradan değiştirilmediğini kanıtlar. Bu yüzden yüke parola ya da gizli veri koyulmaz.

Nasıl çalışır?

Tipik akış şöyledir: • Kullanıcı kullanıcı adı ve parolayla giriş yapar. • Sunucu bilgileri doğrular ve kısa ömürlü bir erişim jetonu üretip imzalar. • İstemci jetonu her API isteğinin yetkilendirme başlığında gönderir. • Sunucu imzayı, bitiş zamanını ve beklenen yayıncı ile hedef bilgilerini doğrular; geçerliyse isteği kullanıcının yetkileriyle işler.

Geçerlilik süresi dolduğunda istemci, uzun ömürlü bir yenileme jetonuyla yeni erişim jetonu ister. Böylece çalınan bir erişim jetonu yalnızca kısa süre işe yarar.

Oturum çerezinden farkı

Klasik oturumda sunucu kullanıcıya bir oturum kimliği verir ve asıl bilgiyi kendi tarafında saklar; her istekte bu kayıt aranır. JWT'de bilgi jetonun içindedir ve sunucunun durum saklaması gerekmez. Bu, yatay ölçeklenmeyi ve farklı servislerin aynı jetonu doğrulamasını kolaylaştırır.

Bedeli iptaldir: Sunucu kaydı tutmadığı için süresi dolmamış bir jetonu iptal etmek zordur. Çözüm olarak jeton ömrünü kısa tutmak, yenileme jetonlarını sunucuda kaydedip iptal edebilmek ya da iptal edilen jetonların listesini tutmak gerekir. Bu yüzden JWT her projede otomatik olarak daha iyi bir seçenek değildir; tek sunuculu klasik bir web sitesinde oturum çerezi çoğu zaman daha basittir.

Sık yapılan güvenlik hataları

  • İmzayı doğrulamamak ya da "none" gibi imzasız algoritmaları kabul etmek: Saldırgan kendi hazırladığı jetonu geçirebilir. Kabul edilen algoritmalar sunucuda sabitlenmelidir.
  • Zayıf ya da kodun içinde duran gizli anahtar: Anahtar tahmin edilirse herkes geçerli jeton üretebilir.
  • Yayıncı, hedef ve süre alanlarını kontrol etmemek: Başka bir sistem için üretilmiş jeton kabul edilebilir.
  • Yüke hassas bilgi koymak: Yük şifreli değildir.
  • Jetonu tarayıcıda erişimi kolay bir yerde saklamak: Sayfaya enjekte edilen betik jetonu çalabilir; HttpOnly çerez gibi seçenekler bu riski azaltır.
  • Çok uzun ömürlü jeton vermek: Çalınma durumunda zarar süresi uzar.

Mindset programlarında bu konu

Mindset kataloğundaki JWT ile Token Tabanlı Yetkilendirme eğitiminin modülleri JWT yapısı ve imzalama, doğrulama ve güvenlik zafiyetleri, yaşam döngüsü, iptal ve saklama konularını kapsar.

İlgili Mindset programı

JWT ile Token Tabanlı Yetkilendirme

Sık sorulanlar

Sık sorulan sorular

JWT şifreli midir?

Hayır. Standart JWT imzalıdır ama içeriği şifreli değildir; yük kısmı çözülerek herkes tarafından okunabilir. İçeriğin gizli kalması gerekiyorsa şifrelenmiş jeton biçimi kullanılır ya da hassas veri hiç jetonun içine konmaz.

JWT ile OAuth aynı şey mi?

Hayır. OAuth, bir uygulamaya kullanıcı adına sınırlı erişim yetkisi verme çerçevesidir. JWT ise bilgi taşıyan bir jeton biçimidir. OAuth uygulamalarında erişim jetonları JWT olabilir ama olmak zorunda değildir; bunlar birbirinden bağımsız kavramlardır.

JWT'yi çerezde mi yoksa yerel depolamada mı saklamalıyım?

Yerel depolamada duran jeton, sayfaya enjekte edilen zararlı bir betikle okunabilir. HttpOnly ve güvenli ayarlı çerez ise betiklerin erişimini engeller, ama bu kez sahte istek (CSRF) önlemleri gerekir. Seçim uygulamanın mimarisine ve tehdit modeline göre yapılır.

Çalınan bir JWT nasıl geçersiz kılınır?

Süresi dolmamış jeton kendi başına iptal edilemez. Bu yüzden erişim jetonları kısa ömürlü tutulur, yenileme jetonları sunucuda kayıt altına alınır ve iptal edilebilir. Kritik durumlarda ise iptal listesi ya da imza anahtarının değiştirilmesi gibi yöntemler uygulanır.

JWT (JSON Web Token) Nedir? Yapısı ve Güvenliği