Dağıtılmış mimaride yetkilendirme ve kimlik doğrulama katmanını uygulamak için genellikle OAuth 2.0, OpenID Connect veya kurumsal Kimlik Sağlayıcılar (IdP) gibi merkezi kimlik yönetim sistemleri kullanılır. Kimlik doğrulama (kimliği belirleme), dış bir sağlayıcı aracılığıyla gerçekleştirilir, ardından sonuç (genellikle bir token) tüm hizmetlerde yetkilendirme (izinlerin sağlanması) için kullanılır.
Genellikle şema şöyle çalışır:
Python ile PyJWT kütüphanesi üzerinden JWT token'ının kontrol edilmesi için örnek kod:
import jwt from jwt.exceptions import InvalidTokenError def verify_jwt(token, public_key): try: payload = jwt.decode(token, public_key, algorithms=["RS256"]) return payload except InvalidTokenError: return None # kullanım örneği user_info = verify_jwt(received_token, public_key) if user_info: # erişim onaylandı pass else: # erişim reddedildi pass
Anahtar özellikler:
Soru: Kullanıcı haklarının tüm bilgilerini doğrudan JWT token'ında saklamak zorunlu mu?
Zorunlu değil. Token'ın boyutunu en aza indirmek için genellikle yalnızca kullanıcı kimliği ve minimum bir hak/rol seti saklanır. Ayrıntılı izinler, sunucuda talep yoluyla ek talepler veya yüklenen profil claim'leri aracılığıyla alınabilir.
Soru: Yenileme token'ları tüm dağıtılmış mimarilerin zorunlu bir unsuru mu?
Hayır, yenileme token'ları yalnızca uzun süreli bir oturum elde etmek istendiğinde gereklidir. Stateless API'lerde genellikle kısa süreli yalnızca erişim token'ları geçerli olurken, yenileme mantığı yalnızca web veya mobil istemciler için uygulanır.
Soru: JWT'deki yük (payload) bölümü şifrelenebilir mi?
JWT standardına (RFC 7519) göre yük sadece imzalanır, şifrelenmez. Şifreleme için başka bir standart kullanılır - JWE (JSON Web Encryption). Aksi takdirde, token'a sahip olan herkes yükü okuyabilir (örneğin, jwt.io aracılığıyla):
import jwt jwt.decode(token, options={"verify_signature": False})