Mimari (IT)Backend mimarı

Dağıtılmış BT mimarisinde yetkilendirme ve kimlik doğrulama katmanı nasıl uygulanır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

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:

  1. Kullanıcı, IdP aracılığıyla kimlik doğrulamadan geçer.
  2. Erişim token'ı (örneğin, JWT) alır.
  3. Her hizmete erişirken kullanıcı, talep başlığında token'ı sunar.
  4. Hizmet, token'ı doğrular ve erişim haklarını claim'lardan çıkarı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:

  • Merkezi erişim kontrolü, tek bir doğru kaynaktan (IdP, örneğin Keycloak veya Auth0) kodlanır.
  • Güvenlik, tokenleştirme ve imzaların doğrulanması (örneğin, JWT) yoluyla sağlanır.
  • SSO ve çok faktörlü kimlik doğrulama desteği.

Kandırmaca Sorular.

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})