Einführung / Konfiguration des FirstSpirit-Servers / Authentifizierung mit OpenID Connect

Authentifizierung mit OpenID Connect

Allgemeine Informationen zu OpenID Connect

Inhaltsverzeichnis

Was ist OpenID Connect?

OpenID Connect (OIDC) ist ein Authentifizierungsprotokoll, das auf OAuth 2.0 aufbaut. Es ermöglicht Clients, die Identität eines Benutzers auf Basis einer Authentifizierung durch einen Authorization Server (OpenID Provider) zu verifizieren. Zusätzlich können grundlegende Profilinformationen des Benutzers abgefragt werden.

Begriff

Beschreibung

OpenID Provider (OP)

Der Authentifizierungsserver, der die Benutzeridentität verwaltet (z.B. Keycloak).

Relying Party (RP)

Die Anwendung, die eine Authentifizierung anfordert; hier: der FirstSpirit-Server.

ID Token

Ein JSON Web Token (JWT), das die Identität des authentifizierten Benutzers enthält.

Access Token

Ein Token, das den Zugriff auf geschützte Ressourcen (z.B. den UserInfo-Endpoint) ermöglicht.

UserInfo Endpoint

Ein OIDC-Endpoint, der zusätzliche Benutzerinformationen (Claims) bereitstellt.

Claims

Schlüssel-Wert-Paare mit Benutzerinformationen (z.B. preferred_username, email, groups)

  

Das FirstSpirit OIDC Login Modul unterstützt drei OAuth 2.0 / OpenID Connect-Flows:

Modulbeschreibung

Funktionsweise und Architektur

Das FirstSpirit OIDC Login Modul ist ein JAAS-basiertes Authentifizierungsmodul, das als FirstSpirit-Modul (FSM) installiert wird. Es integriert sich in den standardmäßigen JAAS-Login-Mechanismus von FirstSpirit und delegiert die Authentifizierung an einen externen OpenID-Connect-Provider.

Untersützte Authentifizierungsflows

Authorization Code Flow (Browser-Login / SSO)

Der Authorization Code Flow wird für browserbasiertes Login über den ContentCreator oder andere Web-Clients verwendet. Der Ablauf ist wie folgt:

  1. Der Benutzer ruft den FirstSpirit-Client im Browser auf.
  2. Das Login-Modul leitet den Browser zum Login-Formular des OpenID Providers weiter.
  3. Nach erfolgreicher Authentifizierung leitet der Provider den Browser mit einem Authorization Code zurück an FirstSpirit.
  4. Das Modul tauscht den Authorization Code gegen ein ID-Token und ein Access-Token ein.
  5. Das Modul validiert das ID-Token und ruft optional den UserInfo-Endpoint ab.
  6. Der Benutzer wird in FirstSpirit angemeldet.

Dieser Flow unterstützt Single Sign-On (SSO); d.h., ist der Benutzer bereits beim OpenID Provider angemeldet, erfolgt die Authentifizierung ohne erneute Passworteingabe.

Resource Owner Password Credentials Flow (CLI/API)

Der Password Flow wird für nicht-interaktive Clients verwendet, z.B. für API-Zugriffe. Der Ablauf ist wie folgt:

  1. Der Client sendet Benutzername und Passwort an FirstSpirit.
  2. Das Login-Modul sendet die Zugangsdaten direkt an den Token-Endpoint des OpenID Providers.
  3. Der Provider antwortet mit einem ID-Token und einem Access-Token.
  4. Das Modul validiert das ID Token und ruft optional den UserInfo-Endpoint ab.
  5. Der Benutzer wird in FirstSpirit angemeldet.

Wichtig Nicht alle OpenID-Provider unterstützen den Password Flow. Prüfen Sie die Dokumentation Ihres Providers.

Token Exchange Flow (Token-basierte Authentifizierung)

Der Token-Exchange-Flow ermöglicht die Authentifizierung mit einem bereits vorhandenen Token. Dies ist nützlich, wenn eine vorgeschaltete Anwendung bereits ein gültiges Token besitzt. Der Ablauf ist wie folgt:

  1. Der Client übergibt ein vorhandenes Token (Access Token, ID Token oder Refresh Token) an FirstSpirit.
  2. Das Login-Modul tauscht dieses Token beim Token-Endpoint des OpenID Providers gegen ein neues ID Token und Access Token aus (RFC 8693 Token Exchange).
  3. Das Modul validiert das neue ID Token und ruft optional den UserInfo-Endpoint ab.
  4. Der Benutzer wird in FirstSpirit angemeldet.

Unterstützte Token-Typen:

Token-Typ

Beschreibung

Access Token (Standard)

Bearer Access-Token wird verwendet, wenn kein Typ angegeben ist.

ID

ID-Token

refresh

Refresh-Token

  
Wichtig Nicht alle Identity Provider unterstützen alle Token-Typen. Keycloak unterstützt beispielsweise nur Access-Token.

FS-Connection mit Token aufbauen

Eine FirstSpirit-Verbindung kann mit einem vorhandenen Token über die Verbindungsparameter hergestellt werden:

import de.espirit.firstspirit.access.*; 

// Verbindung mit Access Token (Standard)
Connection c = ConnectionManager.getConnection(
"localhost", 4088, ConnectionManager.SOCKET_MODE,
"plain", Map.of("token", "abc123...")
);
c.connect();

// Mit explizitem Token-Typ:
Map.of("token", "abc123...", "tokenType", "refresh")
Map.of("token", "abc123...", "tokenType", "ID")

Voraussetzungen

Für die Einrichtung des OIDC-Login-Moduls werden die folgenden Voraussetzungen benötigt:

  • FirstSpirit Server ab Version 5.2.250606 mit JAAS-Unterstützung
  • Registrierter OpenID Connect Provider (Issuer), hier Keycloak
  • Client-Registrierung beim Provider:
    • Client ID
    • Client Secret (empfohlen)
    • Konfigurierte Redirect-URI (für den Authorization Code Flow)
  • Netzwerkzugriff vom FirstSpirit Server zum OpenID Provider (HTTPS)

Client-Registrierung beim Provider

Registrieren Sie eine neue Client-Anwendung bei Ihrem OpenID Provider mit den folgenden Einstellungen:

Einstellung

Wert

Client Type

Confidential (mit Client Secret)

Redirect URI

Die URL des FirstSpirit-Servers, z.B. https://firstspirit.example.com/fs5/auth

Grant Types

authorization_code
(für Browser-Login);
optional: password
(für CLI/API)

Scopes

openid, profile, email;
optional: phone, groups

  
Wichtig Die genaue Vorgehensweise hängt vom verwendeten OpenID-Provider ab.

Installation und Einrichtung des Moduls

FSM-Datei installieren

  • Öffnen Sie den ServerManager und verbinden Sie sich mit dem FirstSpirit Server.
  • Navigieren Sie zu Server-Eigenschaften > Module.
  • Klicken Sie auf Installieren und wählen Sie die Datei fs-oidc-login-{version}.fsm aus.
  • Bestätigen Sie die Installation.

WebApp-Deployment (für Authorization Code Flow)

Wenn der Authorization Code Flow verwendet werden soll, muss die Web-Komponente des Moduls zur Root-WebApp hinzugefügt werden:

  • Navigieren Sie im ServerManager zu Projekt-Eigenschaften > Web-Komponenten.
  • Fügen Sie die Web-Komponente des OIDC-Moduls zur Root-WebApp hinzu.
  • Deployen Sie die Root-WebApp neu.

Ohne diesen Schritt steht der HTTP-Callback-Endpoint für den Authorization Code Flow nicht zur Verfügung.

OIDC-Service starten

Nach der Installation muss der Service OIDC Service gestartet werden:

  • Navigieren Sie im ServerManager zu Server-Eigenschaften > Module > fs-oidc-login > OIDC Service.
  • Starten Sie den Service über den Start-Button bzw. aktivieren Sie Automatisch starten.

Der Service stellt die Konfigurationsschnittstelle bereit und wird von den Login-Modulen benötigt.

Konfigurationsdatei bearbeiten (ServerManager GUI)

  • Doppelklicken Sie auf den OIDC Service um die Konfigurationsoberfläche zu öffnen.
  • Die Konfigurationsdatei fs-oidc.conf wird in einem Texteditor angezeigt.
  • Passen Sie die Konfiguration an Ihren OpenID Provider an.
  • Klicken Sie auf OK um die Konfiguration zu speichern.

Über den Upload-Button können Sie zusätzliche Dateien (z. B. statische Provider-Metadaten) in das Konfigurationsverzeichnis hochladen.

Die Konfigurationsdatei wird im Verzeichnis {FS-Install}/conf/fs-oidc/fs-oidc.conf
gespeichert.

JAAS-Konfiguration anpassen

Passen Sie die JAAS-Konfigurationsdatei fs-jaas.conf an. Der Standardpfad ist {FS-Install}/conf/fs-jaas.conf.

Mehr Informationen zur JAAS-Konfiguration finden Sie in hier.

Konfigurationsdatei (fs-oidc.conf)

Die Konfiguration des OIDC-Login-Moduls erfolgt über die Datei fs-oidc.conf im Verzeichnis {FS-Install}/conf/fs-oidc/. Die Datei verwendet ein INI-ähnliches Format mit Sektionen.

Aufbau und Sektionen

Die Konfigurationsdatei unterstützt mehrere Sektionen. Jede Sektion wird durch [sektionsname] eingeleitet. Die Sektion [default] ist die Standardsektion und dient als Fallback: Wenn ein Wert in einer spezifischen Sektion nicht gefunden wird, wird automatisch der Wert aus [default] verwendet.

Welche Sektion eines Login-Moduls verwendet wird, wird in der JAAS-Konfigurationsdatei fs-jaas.conf über die Option section festgelegt (siehe JAAS-Konfiguration).

Beispielstruktur:

[default]
# Gemeinsame Konfiguration fuer alle Flows
op.issuer=https://idp.example.com/realms/myrealm
rp.clientId=firstspirit
rp.clientSecret=geheim123
import.user=true
user.login=${oidc:preferred_username}

[auth]
# Spezifische Konfiguration fuer den Authorization Code Flow
rp.redirectUri=${request:PROXY}

[pass]
# Spezifische Konfiguration für den Password Flow
op.scopes=openid, profile, email

In diesem Beispiel erben [auth] und [pass] alle Werte aus [default], überschreiben jedoch einzelne Eigenschaften für ihren jeweiligen Anwendungsfall.

OpenID Provider Konfiguration (op.*)

Property

Beschreibung

Default

op.issuer

Pflicht. Issuer-URL des OpenID-Providers.
Diese wird sowohl zur Validierung als auch für die automatische Metadaten-Erkennung (Discovery) verwendet.

(leer)

op.metadata

Optionaler Dateiname oder URL für statische Provider-Metadaten im JSON-Format. Wenn der Wert mit „http:“ oder „https:“ beginnt, wird er als URL behandelt, aAndernfalls wird eine Datei im Konfigurationsverzeichnis erwartet. Wenn leer, wird die automatische Discovery über {issuer}/.well-known/openid-configuration verwendet.

(leer)

op.metadata.cacheTime

Cache-Dauer für Provider-Metadaten in Sekunden. Wenn leer, wird die Cache-Dauer aus den HTTP-Response-Headern ermittelt (siehe hier).

(leer)

op.scopes

Kommagetrennte Liste der zu beantragenden OAuth-Scopes.
Scopes, die vom Provider nicht unterstützt werden, werden automatisch entfernt.

openid, profile, email, phone, groups

   

Relying Party Konfiguration (rp.*)

Property

Beschreibung

Default

rp.clientId

Pflicht. Die Client-ID, die beim OpenID-Provider registriert ist.

(leer)

rp.clientSecret

Das Client-Secret für die Authentifizierung am Token-Endpoint. Wenn es leer ist, wird keine Client-Authentifizierung durchgeführt. Die Authentifizierungsmethode (client_secret_basic oder client_secret_post) wird automatisch anhand der Provider-Metadaten gewählt.

(leer)

rp.redirectUri

Die Redirect-URI für den Authorization Code Flow muss mit der beim Provider konfigurierten Redirect-URI übereinstimmen. Variablenersetzung wird unterstützt (siehe hier).

${request:URI}

   

Benutzer-Import Konfiguration (import.*, user.*)

Property

Beschreibung

Default

import.user

Wenn true, wird der Benutzer bei jedem Login in FirstSpirit angelegt oder aktualisiert.
Wenn false, wird nur geprüft, ob ein FirstSpirit-Benutzer mit dem gemappten Login-Namen existiert.

true

user.login

Pflicht. Mapping für den FirstSpirit-Login-Namen.

${oidc:preferred_username}

user.email

Mapping für die E-Mail-Adresse des Benutzers.

${oidc:email}

user.phone

Mapping für die Telefonnummer des Benutzers.

${oidc:phone_number}

user.abbreviation

Mapping für das Kürzel des Benutzers.

${oidc:preferred_username}

user.realname

Mapping für den Anzeigenamen des Benutzers.

${oidc:name}

user.groups

Kommagetrennte Liste der Benutzergruppen, die typischerweise über den OIDC-Claim groups gemappt werden.

${oidc:groups}

user.section

Zusätzliche Abschnittsinformation für den Benutzer.

${oidc:sub} ${oidc:exp}

   

Verhalten beim Benutzer-Import (import.user=true)

  • Benutzer werden als extern markiert.
  • Das Passwort von nicht-Administrator-Benutzern wird auf einen leeren String gesetzt (Login nur über OIDC möglich).
  • Das Passwort des Administrator-Benutzers (Admin) wird nicht verändert, damit ein lokaler Login weiterhin möglich bleibt.
  • Bei jedem Login werden die Benutzereigenschaften (Name, E-Mail, Gruppen etc.) aktualisiert.

Gruppen-Mapping (group.*)

Property

Beschreibung

Default

group.match.mode

Match-Modus für externe Gruppennamen. Mögliche Werte: contains (der externe Gruppenname muss im FS-Gruppennamen enthalten sein) oder equals (exakte Übereinstimmung).

contains

group.name

Mapping für den externen Gruppennamen. Ermöglicht das Hinzufügen eines Präfixes oder Suffixes. Die Variable ${oidc:groupName} enthält den aktuellen Gruppennamen aus der user.groups-Liste.

${oidc:groupName}

   

Variablenersetzung

Konfigurationswerte in fs-oidc.conf unterstützen Variablenersetzung. Variablen haben die Syntax ${namespace:name} und werden zur Laufzeit aufgelöst.

OIDC-Claims (${oidc:*})

OIDC-Variablen werden aus den Claims des ID Tokens und der UserInfo-Antwort befüllt. UserInfo-Claims haben dabei Vorrang vor JWT-Claims, das heißt, wenn ein Claim sowohl im ID Token als auch in der UserInfo-Antwort vorhanden ist, wird der Wert aus der UserInfo-Antwort verwendet.

Standard-JWT-Variablen

Variable

Beschreibung

${oidc:Subject}

JWT Subject (sub): eindeutige Benutzer-ID beim Provider

${oidc:Issuer}

JWT Issuer (iss): URL des ausstellenden Providers

${oidc:Audience}

JWT Audience (aud): Empfänger des Tokens (Client-ID)

${oidc:JwtId}

JWT ID (jti): eindeutige Token-ID

${oidc:IssuedAt}

Ausstellungszeitpunkt des Tokens (ISO-8601 Format)

${oidc:Expiration}

Ablaufzeitpunkt des Tokens (ISO-8601 Format)

  

OIDC Standard-Claims

Alle OIDC Standard Claims und JWT Registered Claims können über ${oidc:claimName} referenziert werden.

Häufig verwendete Claims:

Variable

Beschreibung

${oidc:preferred_username}

Bevorzugter Benutzername

${oidc:name}

Vollständiger Name

${oidc:given_name}

Vorname

${oidc:family_name}

Nachname

${oidc:email}

E-Mail-Adresse

${oidc:phone_number}

Telefonnummer

${oidc:groups}

Gruppenmitgliedschaften (providerabhängig)

${oidc:sub}

Subject Identifier (identisch mit ${oidc:Subject})

  

Spezial-Variable für Gruppen-Mapping

Variable

Beschreibung

${oidc:groupName}

Der aktuelle Gruppenname während der Verarbeitung der user.groups-Liste. Nur innerhalb von group.name verwendbar.

  
Wichtig Wenn eine Variable nicht aufgelöst werden kann, wird sie durch einen leeren String ersetzt und eine Warnung wird im Log ausgegeben.

FirstSpirit-Eigenschaften (${fs:*})

FirstSpirit-Server-Properties können über ${fs:propertyName} referenziert werden. Der Wert wird aus der Server-Konfiguration (fs-server.conf) gelesen.

Beispiel:

rp.redirectUri=https://${fs:SYMBOLIC_HOSTNAME}/fs5/auth

→ Liest den Wert der Server-Property SYMBOLIC_HOSTNAME aus der FirstSpirit-Server-Konfiguration aus.

HTTP-Request-Variablen (${request:*})

Diese Variablen sind nur im Authorization Code Flow verfügbar, da dort ein HTTP-Request vorliegt.

Variable

Beschreibung

${request:URI}

Die aktuelle HTTP-Request-URL inklusive Protokoll, Hostname, Port und Pfad (ohne Query-Parameter).

${request:PROXY}

Wie ${request:URI}, berücksichtigt jedoch zusätzlich die X-Forwarded-* Header eines vorgeschalteten Reverse-Proxys. Ausgewertete Header: X-Forwarded-Proto, X-Forwarded-Host, X-Forwarded-Port.

${request:FORWARDED}

Wie ${request:URI}, berücksichtigt jedoch den RFC 7239 Forwarded Header eines vorgeschalteten Reverse-Proxys; Beispiel: Forwarded: proto=https;host=external.example.com.

  

Empfehlung für Reverse-Proxy-Setups

Verwenden Sie ${request:PROXY} oder ${request:FORWARDED} für rp.redirectUri, damit die Redirect-URI die externe (öffentliche) URL des Servers enthält:

# Für Reverse Proxys mit X-Forwarded Headern:
rp.redirectUri=${request:PROXY}

# Für Reverse Proxys mit RFC 7239 Forwarded Header:
rp.redirectUri=${request:FORWARDED}

Standard-Ports (80 für HTTP, 443 für HTTPS) werden in der generierten URL automatisch weggelassen.

Provider-Metadaten und Caching

Das Modul benötigt die Metadaten des OpenID-Providers (Endpoints, unterstützte Algorithmen, Scopes etc.). Diese können auf drei Arten bereitgestellt werden.

Auto-Discovery

Wenn op.metadata leer ist, wird die automatische Discovery verwendet. Das Modul ruft die Standard-URL {op.issuer}/.well-known/openid-configuration ab.

Wichtig Dies ist die empfohlene Methode, da die Metadaten immer aktuell sind.

Statische Metadaten (Datei oder URL)

Alternativ kann op.metadata wie folgt gesetzt werden:

  • Datei: Ein Dateiname (ohne Pfad) im Konfigurationsverzeichnis {FS-Install}/conf/fs-oidc/. Die Datei muss das JSON-Format der OpenID-Provider-Metadaten enthalten. Dateien können über den Upload-Button in der ServerManager-GUI hochgeladen werden.
  • URL: Eine URL, die mit http: oder https: beginnt. Das Modul ruft die Metadaten von dieser URL ab.

# Datei im Konfigurationsverzeichnis:
op.metadata=provider-metadata.json

# URL:
op.metadata=https://idp.example.com/.well-known/openid-configuration

Cache-Konfiguration

Provider-Metadaten werden gecacht um wiederholte HTTP-Anfragen zu vermeiden. Die Cache-Dauer wird in folgender Priorität bestimmt:

  • Konfigurations-Wert: op.metadata.cacheTime in Sekunden (wenn gesetzt)
  • HTTP Cache-Control Header: max-age-Direktive aus der HTTP-Antwort
  • HTTP Expires Header: Ablaufzeitpunkt aus der HTTP-Antwort
  • Kein Caching: Wenn keine der obigen Informationen verfügbar ist

Für statische Metadaten aus einer Datei beträgt die Standard-Cache-Dauer 10 Minuten.

Beispiel:

# Metadaten 1 Stunde cachen: 
op.metadata.cacheTime=3600

JAAS-Konfiguration

Die Login-Module werden in der JAAS-Konfigurationsdatei fs-jaas.conf (Standardpfad: {FS-Install}/conf/fs-jaas.conf) konfiguriert. Jedes Login-Modul wird mit seinem vollqualifizierten Klassennamen und einem Control-Flag eingetragen.

Authorization Code Flow

fs5 { 
com.crownpeak.firstspirit.auth.oidc.OidcAuthLoginModule sufficient;
};

Dieses Login-Modul kann nur für browserbasierte Clients verwendet werden, die HTTP-Redirects unterstützen.

Da das Modul einen HTTP-Redirect auf den IdP durchführt, sollte es immer an letzter Stelle in der jeweiligen JAAS-Konfiguration mit dem Wert sufficient stehen. Für die anderen Login-Flows gilt diese Einschränkung nicht.

Password Flow

fs5 { 
com.crownpeak.firstspirit.auth.oidc.OidcPassLoginModule sufficient;
};

Dieses Login-Modul wird für SiteArchitect, ServerManager und CLI-Zugriffe (fs-cli) verwendet.

Token Exchange Flow

fs5 { 
com.crownpeak.firstspirit.auth.oidc.OidcTokenLoginModule sufficient;
};

Kombination mehrerer Flows

In der Regel werden mehrere Login-Module kombiniert, um verschiedene Client-Typen zu unterstützen. Die Module werden in der angegebenen Reihenfolge aufgerufen. Das Control-Flag sufficient bewirkt, dass die Verarbeitung bei erfolgreicher Authentifizierung durch ein Modul stoppt.

fs5 { 
com.crownpeak.firstspirit.auth.oidc.OidcAuthLoginModule sufficient;
com.crownpeak.firstspirit.auth.oidc.OidcPassLoginModule sufficient;
};

Typische Konfiguration mit Fallback auf lokale Authentifizierung

fs5 { 
com.crownpeak.firstspirit.auth.oidc.OidcPassLoginModule sufficient;
de.espirit.firstspirit.server.authentication.FSUserLoginModule optional; }
;

websso {
de.espirit.firstspirit.server.authentication.FSTicketLoginModule sufficient;
de.espirit.firstspirit.server.authentication.FSUserLoginModule optional;
com.crownpeak.firstspirit.auth.oidc.OidcAuthLoginModule sufficient;
};

Im Block fs5 wird zuerst der Password Flow (CLI/API) und anschließend das lokale FirstSpirit-Login versucht. Der websso-Block wird für browserbasierte Clients verwendet: Zuerst wird ein vorhandenes Ticket geprüft, dann das lokale Login und zuletzt der Auth-Code-Flow mit Redirect zum IdP. Dadurch bleibt ein Login mit lokalen FirstSpirit-Zugangsdaten (z. B. Admin) möglich.

Verwendung von Sektionen

Über die Option section kann jedes Login-Modul auf eine bestimmte Sektion in der fs-oidc.conf verwiesen werden. So können die Flows unterschiedlich konfiguriert werden, obwohl sie dieselbe Konfigurationsdatei nutzen:

fs5 { 
com.crownpeak.firstspirit.auth.oidc.OidcAuthLoginModule sufficient section="auth";
com.crownpeak.firstspirit.auth.oidc.OidcPassLoginModule sufficient section="pass";
};

In diesem Beispiel verwendet der Auth Code Flow die Sektion [auth] und der Password Flow die Sektion [pass] aus der fs-oidc.conf. Werte, die in der jeweiligen Sektion nicht gesetzt sind, werden aus [default] übernommen.

Wenn keine section angegeben ist, wird automatisch die Standard-Sektion benutzt.

Konfigurationsbeispiel - Keycloak

Voraussetzungen bei Keycloak

  1. Erstellen Sie einen neuen Client in Ihrem Keycloak Realm.
  2. Setzen Sie Client authentication auf On (Confidential).
  3. Aktivieren Sie Standard flow (Authorization Code) und optional Direct access grants (Password Flow).
  4. Fügen Sie die Redirect-URI hinzu, z. B. https://firstspirit.example.com/*.
  5. Optional: Erstellen Sie einen Client-Scope groups mit einem Mapper vom Typ Group Membership, der den Claim groups erzeugt.

Konfiguration

fs-oidc.conf

[default]
op.issuer=https://keycloak.example.com/realms/myrealm
op.scopes=openid, profile, email, phone, groups

rp.clientId=firstspirit
rp.clientSecret=IHR_CLIENT_SECRET

import.user=true
user.login=${oidc:preferred_username}
user.email=${oidc:email}
user.phone=${oidc:phone_number}
user.abbreviation=${oidc:preferred_username}
user.realname=${oidc:name}
user.groups=${oidc:groups}
user.section=${oidc:sub} ${oidc:exp}

group.match.mode=contains
group.name=${oidc:groupName}

[auth]
rp.redirectUri=${request:PROXY}

fs-jaas.conf

fs5 { 
com.crownpeak.firstspirit.auth.oidc.OidcPassLoginModule sufficient;
de.espirit.firstspirit.server.authentication.FSUserLoginModule optional;
};

websso {
de.espirit.firstspirit.server.authentication.FSTicketLoginModule sufficient;
de.espirit.firstspirit.server.authentication.FSUserLoginModule optional;
com.crownpeak.firstspirit.auth.oidc.OidcAuthLoginModule sufficient section="auth";
};

Fehlererkennung und -behebung

Login schlägt fehl

Symptom

Mögliche Ursache

Lösung

"Parameter not set: [...] rp.clientId"

Client-ID nicht konfiguriert

rp.clientId in fs-oidc.conf setzen

"Parameter not set: [...] op.issuer"

Issuer-URL nicht konfiguriert

op.issuer in fs-oidc.conf setzen

"Token request error 'invalid_client'"

Falsches Client-Secret

rp.clientSecret prüfen

"Token request error 'invalid_grant'"

Ungültige Zugangsdaten oder abgelaufener Code

Zugangsdaten prüfen; beim Auth Code Flow ggf. Redirect-URI prüfen

"Token request error 'unauthorized_client'"

Client nicht für den verwendeten Grant-Typ autorisiert

Grant-Types in der Provider-Konfiguration prüfen

"ManagerProvider not available, OIDC login disabled."

OIDC Service nicht gestartet

Service im ServerManager starten (siehe hier)

"Error creating OIDC login module instance"

Modul nicht korrekt installiert

FSM-Installation prüfen

   

Redirect-URI-Probleme

Symptom

Mögliche Ursache

Lösung

"redirect_uri_mismatch" beim Provider

Die Redirect-URI in fs-oidc.conf stimmt nicht mit der beim Provider konfigurierten URI überein.

URIs exakt abgleichen (Protokoll, Host, Port, Pfad)

Redirect-URI enthaelt interne IP/Hostname

Reverse-Proxy leitet keine Forwarding-Header weiter.

${request:PROXY} oder ${request:FORWARDED} verwenden und Proxy-Konfiguration prüfen

Leere Redirect-URI

Kein HTTP-Request im Password Flow vorhanden

rp.redirectUri explizit setzen oder ${request:*} Variablen nur im Auth Code Flow verwenden

   

Token-Validierungsfehler

Symptom

Mögliche Ursache

Lösung

"Unexpected issuer"

Issuer im Token stimmt nicht mit op.issuer überein.

op.issuer prüfen -- muss exakt mit dem Issuer in den Provider-Metadaten übereinstimmen.

"JWSAlgorithm not found"

Der Signatur-Algorithmus des Tokens wird vom Provider nicht in den Metadaten angegeben.

Provider-Konfiguration prüfen

"Invalid Auth state"

Der State-Parameter der Authentifizierungsantwort ist unbekannt oder abgelaufen (Timeout: 10 Minuten)

Login erneut versuchen; bei langsamem Netzwerk ggf. die Ursache prüfen

   

Logging und Debug-Ausgaben

Das Modul verwendet das FirstSpirit-Logging-Framework. Für detaillierte Debug-Ausgaben aktivieren Sie das Debug-Logging für die folgenden Pakete:

  • com.crownpeak.firstspirit.auth.oidc: Login-Modul und Konfiguration
  • com.crownpeak.firstspirit.auth.oidc.impl: Flow-Implementierungen
  • com.crownpeak.firstspirit.auth.oidc.nimbus: OIDC/OAuth-Operationen (Token-Requests, Metadaten, Validierung)

Im Debug-Modus werden unter anderem folgende Informationen ausgegeben:

  • Provider-Metadaten (Endpoints, unterstützte Algorithmen)
  • Authentication Request URLs
  • JOSE-Header und JWT-Claims des ID-Tokens
  • UserInfo-Antworten
  • Warnungen bei unbekannten oder fehlenden Claims/Variablen

Wichtig Debug-Logging kann sensible Daten (Tokens, Claims) im Log ausgeben. Aktivieren Sie es nur temporär zur Fehleranalyse und deaktivieren Sie es anschließend wieder.

© 2005 - 2026 Crownpeak Technology GmbH | Alle Rechte vorbehalten. | FirstSpirit 2026.4 | Datenschutz