JWT nasıl çalışır
Bir JWT, noktalarla birleştirilmiş üç Base64URL kodlu bölümden oluşur: header.payload.signature. Başlık, RS256 gibi imzalama algoritmasını belirtir. Yük ise talepleri taşır: iss (veren), sub (özne), aud (hedef kitle), exp (son geçerlilik) ve iat (veriliş zamanı) gibi kayıtlı talepler ile e-posta, roller veya kiracı gibi özel talepler. İmza ilk iki bölümü kapsar; en küçük değişiklik jetonu geçersiz kılar.
İmzalama iki ailede toplanır. HMAC (HS256), imzalama ve doğrulama için tek bir ortak sır kullanır; tek uygulamalı senaryolara uygundur. RSA (RS256/384/512) veya ECDSA gibi asimetrik algoritmalar özel anahtarla imzalar; genel anahtarı elinde tutan herkes doğrulayabilir. Kimlik sağlayıcıların anahtarlarını bir JWKS uç noktasında yayımlamasının ve her mikroservisin jetonları bağımsızca doğrulayabilmesinin nedeni budur. Kritik nokta şudur: standart bir JWT imzalıdır ama şifreli değildir; jetonu ele geçiren herkes yükü okuyabilir, bu yüzden taleplerde asla sır taşınmaz.
JWT neden önemli
JWT, modern kimliğin temel jeton biçimidir. OpenID Connect kimlik jetonları tanım gereği JWT'dir, OAuth 2.0 erişim jetonları da çoğunlukla öyledir ve sektördeki API'ler bunları hamiline kimlik bilgisi olarak kabul eder. Cazibesi durumsuzluğundadır: servis imzayı doğrular, son geçerliliği ve hedef kitleyi kontrol eder, sonra bir oturum deposuna veya ağ çağrısına gerek kalmadan taleplere güvenir; bu da mikroservislere ve yatay ölçeklemeye doğal biçimde uyar.
Durumsuzluk, yönetilmesi gereken ödünleşimdir de. İmzalı bir jeton süresi dolana dek geçerli kalır; ömrü içinde erişimi geri almak ek mekanizma ister. Pratik desen, saatler değil dakikalarla ölçülen kısa ömürlü erişim jetonları kullanmak ve bunları kimlik sağlayıcıdan yenilemektir; sağlayıcı her yenilemede kullanıcının durumunu yeniden değerlendirir. Tek başına anında iptal gerektiren senaryolara ise sunucu taraflı oturumlar veya jeton sorgulama (introspection) daha uygundur.
Uygulamada JWT
Doğrulama disiplini her şeydir. İmzayı verenin yayımlanmış anahtarlarına göre doğrulayın; beklenen algoritmayı jetonun başlığına güvenmek yerine sabitleyin (alg=none ve algoritma karıştırma saldırıları tam olarak bunu istismar eder) ve her istekte iss, aud ve exp değerlerini kontrol edin. Jetonları betiklerin okuyabildiği tarayıcı local storage alanından uzak tutun; httpOnly çerezler veya bellek içi saklama daha güvenli adreslerdir.
Jeton her istekle taşındığı için yükü yalın tutun ve imza anahtarlarını istemcilerin JWKS üzerinden izleyebileceği bir düzenle döndürün. Monosign, OIDC ve API entegrasyonları için RSA-SHA256, SHA384 veya SHA512 ile imzalanmış JWT'ler üretir; servisler yayımlanan anahtarlarla bunları bağımsızca doğrular.