SysteemarchitectuurBackend architect

Hoe de autorisatie- en authenticatielaag in een gedistribueerde IT-architectuur te implementeren?

Slaag voor sollicitatiegesprekken met de Hintsage AI-assistent

Antwoord.

Voor de implementatie van de autorisatie- en authenticatielaag in een gedistribueerde architectuur worden doorgaans systemen voor gecentraliseerd identiteitsbeheer gebruikt, zoals OAuth 2.0, OpenID Connect of bedrijfs-Identity Providers (IdP). Authenticatie (identiteitsvaststelling) gebeurt via een externe provider, waarna het resultaat (meestal een token) wordt gebruikt voor autorisatie (toekennen van permissies) in alle services.

Gewoonlijk werkt het schema als volgt:

  1. De gebruiker ondergaat authenticatie via de IdP.
  2. Ontvangt een access-token (bijvoorbeeld JWT).
  3. Bij elke service-aanroep presenteert de gebruiker het token in de request header.
  4. De service valideert het token en haalt de toegangsrechten uit de claims.

Voorbeeld van code voor het controleren van een JWT-token in Python met de PyJWT-library:

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 # voorbeeld gebruik user_info = verify_jwt(received_token, public_key) if user_info: # toegang toegestaan pass else: # toegang geweigerd pass

Belangrijke kenmerken:

  • Gecentraliseerd toegangsbeheer is gecodeerd vanuit een enkele bron van waarheid (IdP, bijvoorbeeld Keycloak of Auth0)
  • Beveiliging wordt bereikt door middel van tokenisatie en validatie van handtekeningen (bijvoorbeeld JWT)
  • Ondersteuning voor SSO en multi-factor authenticatie

Vragen met een valstrik.

Vraag: Is het noodzakelijk om alle informatie over gebruikersrechten direct binnen de JWT-token op te slaan?

Niet noodzakelijk. Om de grootte van de token te minimaliseren, worden doorgaans alleen de gebruikers-id en een minimale set van rechten/rollen opgenomen. Gedetailleerde permissies kunnen op aanvraag van de server worden verkregen via extra verzoeken of geladen profile claims.

Vraag: Zijn refresh-tokens een essentieel element van alle gedistribueerde architecturen?

Nee, refresh-tokens zijn alleen nodig als een langdurige sessie zonder herauthenticatie vereist is. In stateless API’s vallen vaak alleen access tokens van korte duur onder de regels, terwijl refresh-logica alleen voor web- of mobiele clients wordt geïmplementeerd.

Vraag: Kan de payload-sectie in een JWT worden versleuteld?

Volgens de JWT-standaard (RFC 7519) wordt de payload alleen ondertekend, maar niet versleuteld. Voor versleuteling wordt een andere standaard gebruikt — JWE (JSON Web Encryption). Anders kan iedereen die de token heeft de payload lezen (bijvoorbeeld via jwt.io):

import jwt jwt.decode(token, options={"verify_signature": False})