OAuth 2.0 & OpenID Connect
Das Verständnis von OAuth 2.0 und OpenID Connect ist die Grundlage für eine korrekte Integration mit Auris. Diese Seite erklärt die Protokolle, ihre Unterschiede, die von Auris unterstützten Grant-Typen und wie Auris sie intern implementiert.
Was ist OAuth 2.0?
OAuth 2.0 (RFC 6749) ist ein Autorisierungs-Framework. Es bietet eine standardisierte Methode, mit der ein Benutzer einer Drittanbieter-Anwendung begrenzten Zugriff auf seine Ressourcen bei einem anderen Dienst gewähren kann, ohne dabei seine Anmeldedaten an die Drittanbieter-Anwendung weiterzugeben.
Die grundlegende Erkenntnis ist, dass es bei OAuth 2.0 um die Delegation von Zugriff geht — nicht um die Verifizierung von Identität. Wenn du dich mit “Mit Google anmelden” bei einer Drittanbieter-App anmeldest, nutzt Google OAuth 2.0, um der App Zugriff auf deine Profildaten zu gewähren — nicht um zu beweisen, dass du die Person bist, für die du dich ausgibst. Das ist eine separate Schicht.
Kernrollen in OAuth 2.0
| Rolle | Beschreibung |
|---|---|
| Resource Owner | Der Benutzer, dem die Daten gehören und der Zugriff gewährt |
| Client | Die Anwendung, die auf die Daten zugreifen möchte |
| Authorization Server | Der Server, der Tokens ausstellt (Auris) |
| Resource Server | Die API, die die Daten schützt |
In Auris sind Authorization Server und Resource Server Teil derselben Plattform — deiner Auris-Instanz. Der Client ist deine Anwendung, und der Resource Owner ist dein Benutzer.
Was OAuth 2.0 nicht ist
OAuth 2.0 definiert nicht:
- Wie ein Benutzer seine Identität nachweist (kein Login-Protokoll)
- Was in einem Zugriffstoken enthalten ist
- Wie Tokens von Ressourcenservern validiert werden
Diese Lücken führten zur Entstehung von OpenID Connect.
Was ist OpenID Connect?
OpenID Connect (OIDC) ist eine Authentifizierungsschicht, die auf OAuth 2.0 aufbaut. Es beantwortet die Frage, die OAuth 2.0 offen lässt: “Wer ist dieser Benutzer?”
OIDC erweitert den OAuth 2.0-Autorisierungscode-Flow durch:
- Das ID-Token — ein signiertes JWT mit der Identität des Benutzers (Benutzer-ID, E-Mail, Name usw.)
- Den UserInfo-Endpunkt — wo der Client zusätzliche Benutzer-Claims abrufen kann
- Standardisierte Claims — ein definierter Satz von Claim-Namen (
sub,email,name,pictureusw.) - Discovery-Dokument — eine bekannte URL, die die Endpunkte des Providers beschreibt
Bei der Verwendung von OIDC forderst du neben anderen Scopes den openid-Scope an. Das Vorhandensein von openid im Scope teilt dem Authorization Server mit, zusätzlich zum Zugriffstoken ein ID-Token auszustellen.
Der Unterschied in der Praxis
| OAuth 2.0 | OpenID Connect | |
|---|---|---|
| Zweck | Autorisierung (Zugriffsdelegation) | Authentifizierung (Identitätsverifizierung) |
| Ausgestelltes Token | Zugriffstoken (opak oder JWT) | Zugriffstoken + ID-Token |
| Benutzerinfo im Token | Nicht standardisiert | Standardisiert (sub, email, name usw.) |
| Wer der Benutzer ist | Unbekannt | Durch ID-Token etabliert |
| Anwendungsfall | ”Kann diese App meinen Kalender lesen?" | "Wer ist dieser Benutzer?” |
In Auris ist jeder gehostete Login-Flow OIDC — der openid-Scope ist standardmäßig enthalten, und die Token-Antwort enthält immer ein ID-Token zusätzlich zu Zugriffs- und Refresh-Tokens.
Von Auris unterstützte Grant-Typen
OAuth 2.0 definiert mehrere “Grant-Typen” — Flows zum Abrufen von Tokens je nach Art des Clients und Anwendungsfall.
1. Autorisierungscode + PKCE (empfohlen)
Der Standard-Flow für benutzerseitige Anwendungen (Web-Apps, mobile Apps, SPAs, CLIs mit Browser-Weiterleitung). PKCE (Proof Key for Code Exchange, RFC 7636) wird hinzugefügt, um gegen Code-Abfangangriffe zu schützen.
Wann zu verwenden: Jede Anwendung, bei der sich ein echter Benutzer interaktiv anmeldet.
Flow-Zusammenfassung:
- App generiert einen Code-Verifier und Code-Challenge
- Browser wird zur gehosteten Auris-Login-Seite mit dem Code-Challenge weitergeleitet
- Benutzer authentifiziert sich
- Auris leitet mit einem Autorisierungscode zurück zur App weiter
- App tauscht Code + Code-Verifier gegen Tokens aus
Siehe die Seite PKCE-Flow für eine vollständige Schritt-für-Schritt-Anleitung.
2. Client Credentials (M2M)
Für die Machine-to-Machine-Kommunikation, bei der kein Benutzer beteiligt ist. Ein Dienst authentifiziert sich mit seiner client_id und client_secret, um ein Zugriffstoken mit server-definierten Scopes zu erhalten.
Wann zu verwenden: Backend-Dienste, geplante Jobs, CI/CD-Pipelines, interne Microservices.
Flow-Zusammenfassung:
- Dienst sendet
client_idundclient_secretan den Token-Endpunkt - Auris validiert die Anmeldedaten und stellt ein Zugriffstoken mit den erlaubten Scopes aus
- Dienst verwendet das Token, um geschützte APIs aufzurufen
curl -X POST https://api.altovar.net/api/auth/token \
-H "Content-Type: application/json" \
-d '{
"grant_type": "client_credentials",
"client_id": "m2m-service-id",
"client_secret": "m2m-service-secret",
"scope": "read:users manage:roles"
}'Das resultierende Zugriffstoken hat "type": "m2m" in seiner Payload und trägt nur die deklarierten Scopes — keine Benutzeridentität.
3. Device Authorization Grant (RFC 8628)
Für Geräte, die keinen Browser direkt öffnen können: Smart-TVs, CLI-Tools, IoT-Geräte, Spielkonsolen.
Wann zu verwenden: Eingabebeschränkte Geräte oder CLI-Tools, die den Browser des Benutzers nicht weiterleiten können.
Flow-Zusammenfassung:
- Gerät fordert einen Device-Code und User-Code von Auris an
- Auris gibt einen
device_code,user_codeundverification_urlzurück - Gerät zeigt den
user_codean und bittet den Benutzer, dieverification_urlauf einem anderen Gerät aufzurufen - Benutzer authentifiziert sich auf seinem Telefon oder Computer und genehmigt das Gerät
- Gerät fragt den Token-Endpunkt ab, bis der Benutzer genehmigt
- Token-Endpunkt gibt Tokens zurück, sobald genehmigt
4. Token Exchange (RFC 8693)
Ermöglicht den Austausch eines Tokens gegen ein anderes — wird für Impersonierungs- und Delegationsszenarien in komplexen Multi-Service-Architekturen verwendet.
Wann zu verwenden: Backend-Dienste, die im Namen eines Benutzers agieren müssen, oder Admin-Tools, die einen Benutzer zum Debugging impersonieren müssen.
Token Exchange produziert ein Zugriffstoken mit einem act-Claim, der den Akteur (den Dienst, der den Austausch durchführt) und das sub des ursprünglichen Benutzers identifiziert. Erfordert die Berechtigung impersonate:users oder delegate:tokens.
5. CIBA (Client-Initiated Backchannel Authentication)
Eine OpenID Connect-Erweiterung (CIBA, ausgesprochen “see-bah”), die es einem Client ermöglicht, die Authentifizierung für einen Benutzer ohne Browser-Weiterleitung einzuleiten. Stattdessen erhält der Benutzer eine Push-Benachrichtigung oder Out-of-Band-Nachricht und genehmigt oder lehnt die Authentifizierungsanfrage ab.
Wann zu verwenden: Call-Center-Authentifizierung, IoT-Genehmigungen, hochsichere Flows, bei denen der Benutzer auf einem separaten vertrauenswürdigen Gerät authentifiziert werden soll.
Auris unterstützt CIBA in den Modi Poll, Ping und Push.
OAuth 2.0-Endpunkte in Auris
| Endpunkt | Pfad | Beschreibung |
|---|---|---|
| Autorisierung | /api/oauth/authorize | Startet den Autorisierungscode-Flow; leitet Benutzer zum Login weiter |
| Token | /api/auth/token | Tauscht Codes oder Anmeldedaten gegen Tokens aus |
| UserInfo | /api/auth/validate | Gibt Claims für den authentifizierten Benutzer zurück |
| JWKS | /.well-known/jwks.json | Öffentliche Signaturschlüssel für JWT-Verifizierung |
| OIDC Discovery | /.well-known/openid-configuration | Standard-OIDC-Metadatendokument |
| Device Authorization | /api/oauth/device-authorize | Stellt Device-Code und User-Code aus |
Scopes in Auris
OAuth 2.0-Scopes sind leerzeichen-getrennte Strings, die definieren, welchen Zugriff ein Token gewährt. Auris unterstützt sowohl Standard-OIDC-Scopes als auch benutzerdefinierte M2M-Scopes.
Standard-OIDC-Scopes
| Scope | Enthaltene Claims |
|---|---|
openid | sub (für OIDC erforderlich) |
profile | name, firstName, lastName, username |
email | email, emailVerified |
M2M-Scopes
M2M-Tokens verwenden benutzerdefinierte Scopes, die pro Anwendung in der Konsole definiert werden. Beispiele:
read:users— Lesezugriff auf Benutzerdatenmanage:roles— vollständiges CRUD für Rollenread:audit-logs— Zugriff auf die Audit-Protokoll-API
Scopes werden am Token-Endpunkt validiert: Wenn ein Client einen Scope anfordert, der nicht in seiner Konfiguration der erlaubten Scopes aufgeführt ist, wird die Anfrage abgelehnt.
Wie Auris OAuth 2.0 implementiert
Auris basiert auf Keycloak als zugrundeliegender Identitäts-Engine, wobei Auris die Funktionalität von Keycloak erweitert und umhüllt. Die Integration funktioniert auf zwei Ebenen:
Keycloak als Basis-Engine
Keycloak übernimmt:
- Speicherung und Verifizierung von Benutzeranmeldedaten
- Sitzungsverwaltung und Token-Ausstellung
- SAML- und OIDC-Federation
- Protokollbrücken für Social-Login
Auris-Erweiterungen darüber
Auris fügt auf Keycloak auf:
- Gehostete Login-Seiten: Vollständig gebrandete, eigene-Domain-Login-UI (Keycloaks Standard-UI wird ersetzt)
- Actions-Engine: Benutzerdefinierte serverseitige Code-Hooks, die während Login, Registrierung und Token-Ausstellung ausgeführt werden
- Benutzerdefinierte JWT-Claims: Pro-Anwendung konfigurierbare Claim-Injektion zur Token-Ausstellungszeit
- PKCE-Durchsetzung: Auf der Auris-Schicht durchgesetzt (nicht optional)
- Adaptives MFA: Risikobewertung und Step-up-Authentifizierung basierend auf IP, Gerät und Verhalten
- FGA-Integration: Feingranulare Autorisierungsprüfungen auf Ressourcenebene, die über das rollenbasierte Modell von Keycloak hinausgehen
Wenn das Auris SDK loginWithRedirect() aufruft, konstruiert es die Autorisierungs-URL und leitet den Browser zur gehosteten Auris-Login-Seite weiter, die mit Keycloak für die eigentliche Anmeldedaten-Verifizierung koordiniert und dann Tokens über den Auris-Token-Endpunkt ausstellt.
Wenn du mit einer Standard-OIDC-Bibliothek integrierst (ohne Auris SDK), verweise die Bibliothek auf das OIDC-Discovery-Dokument unter /.well-known/openid-configuration. Standard-Bibliotheken (auth0-spa-js, oidc-client-ts, passport-openidconnect usw.) können sich automatisch aus diesem Dokument konfigurieren.
Verwandte Konzepte
- Tokens erklärt — Zugriffstoken, Refresh-Token und ID-Token im Detail
- PKCE-Flow — Autorisierungscode-Flow mit Proof Key for Code Exchange
- Gehostetes Login (Universal Login) — Wie Auris OAuth2 über gehostete Seiten implementiert
- Gehostetes Login-Leitfaden — Schritt-für-Schritt-PKCE-Integration
- M2M Client Credentials — Server-zu-Server-OAuth2-Flow
- Authentifizierungs-API — Token-Ausstellungs- und Refresh-Endpunkte
- Authentifizierungseinstellungen — Erlaubte Grant-Typen und MFA konfigurieren