Zum Hauptinhalt springen

OAuth2 und OIDC

Das System verwendet OpenID Connect (OIDC) für Authentifizierung und OAuth2 für Autorisierung. Keycloak ist der zentrale Identity Provider. Alle Komponenten, die auf gesicherte Ressourcen zugreifen, interagieren über dieses Protokoll.

Begriffe

OAuth2 ist ein Autorisierungsframework: Es legt fest, wie ein Client im Namen eines Nutzers Zugriff auf Ressourcen erhält, ohne dessen Passwort zu kennen. Das Ergebnis ist ein Access Token.

OpenID Connect baut auf OAuth2 auf und ergänzt Authentifizierung: Der Client erhält zusätzlich ein ID Token, das Informationen über die eingeloggte Person enthält (Name, E-Mail, Rollen).

Tokens

TokenFormatVerwendung
Access TokenJWTWird bei jedem API-Aufruf als Authorization: Bearer mitgeschickt
ID TokenJWTEnthält Nutzerinfo für die React-App (Name, Rollen)
Refresh TokenopaqueErneuert das Access Token ohne erneuten Login

Login-Flow (Authorization Code + PKCE)

Die React-App nutzt den Authorization Code Flow mit PKCE (Proof Key for Code Exchange), den empfohlenen Flow für Single Page Applications ohne sicheres Backend-Secret. Alle Anfragen laufen über NGINX, der als transparenter Reverse Proxy fungiert und im Ablauf nicht sichtbar ist.

API-Aufruf mit Token-Validierung

Nach dem Login schickt die React-App das Access Token bei jedem Aufruf mit. Der Microservice als Resource Server validiert das Token eigenständig über den öffentlichen Schlüssel von Keycloak (JWKS), ohne Keycloak bei jeder Anfrage kontaktieren zu müssen.

Token-Weitergabe zwischen Services

Ein Microservice kann das empfangene Token nicht nur validieren, sondern auch an nachgelagerte Services weitergeben. Das ist der Standard-Weg, wenn Service A im Auftrag des eingeloggten Nutzers Service B aufruft: Das Token des Nutzers wird durchgereicht, sodass Service B dieselbe Identität und dieselben Rechte sieht.

Dieses Muster heißt Token Propagation und ist in OAuth2 als Bearer Token Relay spezifiziert.

In Quarkus wird das mit der Extension rest-client-oidc-token-propagation umgesetzt (siehe Quarkus-Dokumentation):

quarkus extension add rest-client-oidc-token-propagation

Die Annotation @AccessToken am REST-Client-Interface registriert automatisch einen Filter, der das eingehende Bearer Token an den ausgehenden Call weiterleitet:

@RegisterRestClient
@AccessToken
@Path("/")
public interface AndererServiceClient {
@GET
@Path("/interne-ressource")
Uni<String> holeRessource();
}
@Path("/mein-endpunkt")
public class MeinResource {

@Inject
@RestClient
AndererServiceClient client;

@GET
public Uni<String> get() {
return client.holeRessource(); // Token wird automatisch weitergeleitet
}
}
warnung

@OidcClientFilter und @AccessToken dürfen nicht am selben Client kombiniert werden — @OidcClientFilter holt ein neues Token, @AccessToken leitet das bestehende weiter.

Rollen und Zugriffssteuerung

Keycloak verwaltet Rollen, die im JWT als Claims enthalten sind. Die Microservices lesen diese Claims aus und entscheiden damit, welche Aktionen ein Nutzer ausführen darf. Die React-App liest die Rollen aus dem ID Token und blendet Funktionen entsprechend ein oder aus.