🎫
← Rehberlere dön

JWT Nedir? JSON Web Token'lar için Kapsamlı Bir Kılavuz

· Etiketler: what-is-jwt, jwt-authentication, jwt-guide, api-security, token-based-auth

JWT Nedir?

JSON Web Token (JWT), taraflar arasında bilgiyi bir JSON nesnesi olarak güvenli bir şekilde iletmek için kompakt, kendi kendine yeten bir yol tanımlayan açık bir standarttır (RFC 7519). JWT'ler, kullanıcı kimlik doğrulaması ve API yetkilendirmesinden mikro hizmetler arası güvenli veri alışverişine kadar her şey için kullanılan, modern web uygulamalarındaki baskın token formatıdır.

JWT Kimlik Doğrulaması Nasıl Çalışır

JWT kimlik doğrulaması, sunucu tarafı oturum depolama ihtiyacını ortadan kaldıran durumsuz bir model izler. Bu akışı anlamak, JWT'lerin neden modern API güvenliği için varsayılan seçenek haline geldiğini anlamanın anahtarıdır.

Kimlik Doğrulama Akışı

  1. Kullanıcı giriş yapar — İstemci, kimlik doğrulama sunucusuna kimlik bilgilerini (kullanıcı adı ve şifre) gönderir.
  2. Sunucu bir JWT oluşturur — Sunucu kimlik bilgilerini doğrular, kullanıcının kimliğini ve izinlerini içeren bir JWT oluşturur, bunu gizli veya özel bir anahtarla imzalar ve istemciye döndürür.
  3. İstemci token'ı saklar — İstemci JWT'yi genellikle localStorage, sessionStorage veya HTTP-only çerezde saklar.
  4. İstemci her istekle token'ı gönderir — Sonraki her API isteği için istemci, JWT'yi Bearer şemasını kullanarak Authorization başlığına ekler: Authorization: Bearer <token>.
  5. Sunucu token'ı doğrular — Sunucu JWT imzasını doğrular, son kullanma süresini kontrol eder ve isteği yetkilendirmek için kullanıcı taleplerini çıkarır.
  6. Oturum sorgulaması gerekmez — JWT gerekli tüm bilgileri içerdiğinden, sunucunun kullanıcıyı tanımlamak için bir veritabanı veya önbellek sorgulamasına ihtiyacı yoktur.

Bu Neden Önemlidir

Geleneksel oturum tabanlı kimlik doğrulama, oturum kimliklerini sunucunun belleğinde veya veritabanında saklar. Her kimliği doğrulanmış istek bir sorgulama gerektirir. JWT'ler bu sorgulamayı ortadan kaldırır — token'ın kendisi kullanıcının kimliğini kanıtlar. Bu, JWT tabanlı sistemleri doğası gereği ölçeklenebilir kılar, çünkü bir kümedeki herhangi bir sunucu, paylaşılan oturum durumu olmadan bir token'ı doğrulayabilir.

JWT ve Oturum Tabanlı Kimlik Doğrulama Karşılaştırması

| Özellik | JWT Kimlik Doğrulaması | Oturum Tabanlı Kimlik Doğrulama | |--------|--------------------|------------------------------| | Depolama | İstemci tarafında (token içinde) | Sunucu tarafında (bellekte veya VT'de) | | Ölçeklenebilirlik | Paylaşılan oturum deposu gerekmez | Örnekler arası paylaşılan oturum deposu gerektirir | | Alanlar arası | Farklı alanlar arasında doğal olarak çalışır | Oturumları paylaşmak zordur | | Mobil uyumluluk | Evet (çerez gerekmez) | Çerez desteği gerektirir | | İptal | Zor (token'ın süresi dolana kadar) | Kolay (oturumu depodan silin) | | Yük boyutu | İstek başına daha büyük (başlıkta token) | Minimum (sadece oturum kimliği) |

JWT API Güvenliği için Neden Kullanılır

JWT'yi kimlik doğrulama için uygun kılan özellikler, onu API'leri güvence altına almak için de ideal hale getirir.

Durumsuz ve Ölçeklenebilir

Her JWT, sunucunun bir isteği yetkilendirmek için ihtiyaç duyduğu tüm bilgileri taşır. Sorgulanacak oturum veritabanı, kontrol edilecek önbellek, sunucular arasında senkronize edilecek durum yoktur. Yük dengeleyiciler, koordinasyon olmadan istekleri herhangi bir sunucu örneğine yönlendirebilir.

Alanlar Arası ve Kökenler Arası

JWT, farklı alanlar ve kökenler arasında doğal olarak çalışır. auth.example.com tarafından verilen bir token, api.example.com ve admin.example.com'a erişmek için kullanılabilir. Bu, JWT'yi tek oturum açma (SSO) sistemlerinin temeli yapar.

İnce Taneli Yetkilendirme

JWT payload'u, roller, izinler ve organizasyon üyelikleri için özel talepler içerebilir:

{
  "sub": "user_abc123",
  "role": "admin",
  "permissions": ["read:users", "write:users", "delete:users"],
  "org_id": "org_xyz789",
  "iat": 1516239022,
  "exp": 1516325422
}

API sunucusu bu talepleri, ek bir sorgulama olmadan doğrudan token'dan okur.

Tek Oturum Açma (SSO) için JWT

Tek oturum açma, en yaygın JWT kullanım durumlarından biridir. Tipik bir SSO mimarisinde:

  1. Kullanıcı, Auth0, Okta veya Keycloak gibi kimlik sağlayıcıya (IdP) giriş yapar.
  2. IdP, özel anahtarıyla imzalanmış bir JWT düzenler.
  3. Kullanıcı bu JWT'yi birden fazla uygulamaya sunar.
  4. Her uygulama, IdP'nin genel anahtarını kullanarak imzayı doğrular.
  5. Her uygulama, her istekte IdP ile iletişim kurmadan token'a güvenir.

Bu model, tek bir girişin — e-posta, dosya depolama, proje yönetimi, İK sistemleri — düzinelerce hizmete erişim sağlamasına olanak tanır, her hizmet kendi giriş akışını uygulamak zorunda kalmaz.

JWT Güvenlik En İyi Uygulamaları

JWT, API güvenliği için güçlü temeller sağlarken, doğru uygulama önemlidir.

Token'ları Kısa Ömürlü Tutun

exp (son kullanma) talebini kısa bir süreye ayarlayın — erişim token'ları için 15 dakika ila 1 saat. Kullanıcının yeniden kimlik doğrulaması yapmasını gerektirmeden yeni erişim token'ları almak için daha uzun ömürlü yenileme token'ları (günler veya haftalar) kullanın.

Her Zaman HTTPS Kullanın

JWT, payload'unu şifrelemez. Token'ı ele geçiren herkes içeriğini çözebilir ve okuyabilir. Ele geçirmeyi önlemek için JWT'leri her zaman HTTPS üzerinden iletin.

Her Şeyi Doğrulayın

Her zaman imzayı doğrulayın, token'ın süresinin dolmadığını kontrol edin, aud (hedef kitle) değerinin uygulamanızla eşleştiğini onaylayın ve beklenmeyen algoritmalara sahip token'ları reddedin.

Token'ları Güvenli Şekilde Saklayın

İstemci tarafında, mümkün olduğunda JWT'leri HTTP-only çerezlerde veya tek sayfa uygulamaları için bellekte saklayın. Hassas verilere erişim sağlayan token'lar için localStorage kullanmaktan kaçının.

Yaygın JWT Yanılgıları

"JWT şifrelenmiştir." — Hayır. JWT imzalanır, şifrelenmez. Payload, geri döndürülebilir olan base64url ile kodlanmıştır. JWE (JSON Web Encryption) şifreleme sağlar, ancak standart JWT kapsamında olmayan ayrı bir spesifikasyondur.

"JWT CSRF'yi önler." — Kendi başına önlemez. Authorization başlığındaki JWT yardımcı olur, ancak token bir çerezdeyse CSRF koruması hala gereklidir.

"JWT sadece kimlik doğrulama içindir." — JWT kimlik doğrulama için kullanılır, ancak aynı zamanda yetkilendirme veri alışverişi, durumsuz oturumlar ve hizmetler arası güvenli bilgi paylaşımı için de kullanılır.

JWT'yi Çevrimiçi Çözün ve Keşfedin

Herhangi bir JSON Web Token'ı incelemek için JWT decoder aracını kullanın. Token'ınızı yapıştırın ve çözülmüş header, payload ve imza algoritmasını anında görün. Araç, token'larınızın hangi verileri taşıdığını anlamanıza ve doğru yapılandırıldıklarını doğrulamanıza yardımcı olur.

JWT Nedir? JSON Web Token'lar için Kapsamlı Bir Kılavuz - CoolTool