Oauth2 Flow
OAuth 2.0 ist ein offenes Standardprotokoll zur sicheren Autorisierung von Anwendungen, ohne dass Benutzer ihre Zugangsdaten direkt weitergeben müssen. Stattdessen erhält eine Anwendung Zugriff auf eine API, indem sie Tokens verwendet.
Type | URL |
---|---|
Authorize Endpoint (Production) | https://oauth2.coreapi.io/oauth2/auth |
Token Endpoint (Production) | https://oauth2.coreapi.io/oauth2/token |
JWK Keys (Production) | https://oauth2.coreapi.io/.well-known/jwks.json |
Authorize Endpoint (Preview) | https://oauth2.preview.coreapi.io/oauth2/auth |
Token Endpoint (Preview) | https://oauth2.preview.coreapi.io/oauth2/token |
JWK Keys (Preview) | https://oauth2.preview.coreapi.io/.well-known/jwks.json |
Um Zugriff auf Oauth2 Clients zu erhalten, erstelle ein Support-Ticket.
Redirect URLs mĂĽssen https verwenden. Hierbei ist http://localhost und http://127.0.0.1 die Ausnahme.
Grundkonzepte von OAuth 2.0
- Authorization Server: Verifiziert die Identität des Benutzers und gibt Access Tokens aus.
- Resource Server: Der Server, der die geschĂĽtzten Ressourcen bereitstellt (z. B. eine API).
- Client: Die Anwendung, die auf die API zugreifen möchte.
- Resource Owner: Der Benutzer, der entscheidet, ob eine Anwendung Zugriff auf seine Ressourcen erhält.
- Access Token: Ein temporäres Token, das für den Zugriff auf die API verwendet wird.
- Refresh Token (optional): Ein langfristiges Token, das zur Erneuerung eines Access Tokens genutzt wird.
Grant Types
Je nach Anwendungsszenario gibt es unterschiedliche Grant Types, die festlegen, wie ein Client ein Access Token erhält. Folgende Grant Types sind durch Fynn unterstützt:
Authorization Code Flow (mit oder ohne PKCE)
Der Authorization Code Flow ist ein OAuth2-Prozess, der für Webanwendungen entwickelt wurde, um Benutzer sicher zu authentifizieren und Zugriff auf geschützte Ressourcen zu gewähren. Dieser Flow wird besonders für serverseitige Anwendungen empfohlen, da die sensiblen Zugangsdaten nicht direkt im Frontend gespeichert werden.
- Einsatzbereich: Webanwendungen & mobile Apps
- Sicherheit: Sehr hoch (Tokens werden nur im Backend verwaltet)
Ablauf des Authorization Code Flow
- Weiterleitung zur Autorisierungsanfrage: Die Anwendung leitet den Benutzer auf die Anmeldeseite des Autorisierungsservers weiter. Hier gibt die Anwendung an, welche Berechtigungen (Scopes) sie benötigt.
- Benutzerauthentifizierung und Zustimmung: Der Benutzer meldet sich beim Autorisierungsserver an und wird gefragt, ob er der Anwendung den gewünschten Zugriff gewähren möchte.
- Erhalt des Autorisierungscodes: Nach erfolgreicher Authentifizierung wird der Benutzer zurĂĽck zur Anwendung geleitet. Dabei wird ein einmaliger Autorisierungscode ĂĽbergeben.
- Austausch des Codes gegen ein Zugriffstoken: Die Anwendung sendet den erhaltenen Code zusammen mit einem geheimen SchlĂĽssel an den Autorisierungsserver. Falls die Anfrage gĂĽltig ist, stellt der Server ein Access Token aus.
- Zugriff auf geschĂĽtzte Ressourcen: Mit dem erhaltenen Access Token kann die Anwendung nun auf geschĂĽtzte APIs zugreifen und im Namen des Benutzers Daten abrufen oder Aktionen durchfĂĽhren.
Proof Key for Code Exchange (PKCE)
PKCE (Proof Key for Code Exchange) ist eine Erweiterung des Authorization Code Flow, die speziell für öffentliche Clients wie Single-Page- und Mobile-Apps entwickelt wurde. Es verhindert, dass der Autorisierungscode durch Angriffe (z. B. Code Interception) missbraucht wird.
Funktionsweise von PKCE:
- Der Client generiert einen zufälligen Code Verifier (eine lange, zufällige Zeichenkette).
- Daraus wird eine Code Challenge abgeleitet (eine transformierte Version des Verifiers, meist als SHA-256 Hash).
- Beim Austausch des Autorisierungscodes gegen ein Access Token muss der Client den ursprĂĽnglichen Code Verifier mit senden.
- Der Server ĂĽberprĂĽft die Challenge und stellt das Access Token nur aus, wenn die Werte ĂĽbereinstimmen.
Da kein geheimer SchlĂĽssel gespeichert werden muss, ist PKCE besonders fĂĽr Clients ohne sichere Speicherung (z. B. Browser-Anwendungen) wichtig.
Erweiterungen des Authorization Code Flow
- Refresh Token fĂĽr langfristigen Zugriff:
Damit sich ein Benutzer nicht ständig neu authentifizieren muss, kann zusätzlich ein Refresh Token angefordert werden. Dies ermöglicht es der Anwendung, ohne erneute Benutzereingabe neue Access Tokens zu erhalten. Hierfür ist der Scope
offline
notwendig. - ID Token fĂĽr Benutzerinformationen (OpenID Connect):
Falls die Anwendung auch Informationen über den angemeldeten Benutzer benötigt, kann ein ID Token angefordert werden. Dieses wird als JWT (JSON Web Token) ausgestellt und enthält beispielsweise die Benutzer-ID, E-Mail-Adresse oder weitere Identitätsattribute. Hierfür ist der Scope
openid
notwendig. - Scopes zur Steuerung der Berechtigungen: Der Autorisierungsprozess kann durch verschiedene Scopes gesteuert werden. Diese definieren, welche Daten oder Funktionen der Benutzer der Anwendung freigibt.
Beispiel
Szenario: Eine Webanwendung möchte den Benutzer authentifizieren und erhält Zugriff auf eine geschützte API.
- Benutzer wird zur Autorisierung weitergeleitet
Die Anwendung leitet den Benutzer zum Autorisierungsserver weiter:
- Benutzer meldet sich an Der Benutzer wird zum Login-Formular von Fynn weitergeleitet. Nach der Anmeldung fragt Fynn, ob die Anwendung Zugriff erhalten darf.
Wenn der Benutzer zustimmt, gibt der Server einen Autorisierungscode zurĂĽck:
- Anwendung tauscht den Code gegen ein Access Token Die Anwendung sendet nun eine POST-Anfrage an den Autorisierungsserver:
Der Server gibt ein Access Token, Refresh Token und JWT Token (OpenID), je nach angegebenen Scopes, zurĂĽck:
Refresh Token
Wenn das Access Token abläuft, kann die Anwendung ein neues Token mit einem Refresh Token anfordern:
Der Server gibt ein Access Token, Refresh Token und JWT Token (OpenID), je nach angegebenen Scopes, zurĂĽck:
Wenn ein Client ein Refresh Token verwendet, um ein neues Access Token zu erhalten, wird auch einen neuer ID Token ausgestellt, sofern der ursprüngliche Token-Austausch bereits einen ID Token enthalten hat. Der neue ID Token hat eine aktualisierte Ablaufzeit, behält jedoch den gleichen auth_time-Wert (den Zeitpunkt der ursprünglichen Authentifizierung des Benutzers) bei. Das auth_time-Claim im ID Token dient dazu, festzustellen, ob die Authentifizierungssitzung des Benutzers noch aktiv ist.
Scopes
Scopes definieren, welche Berechtigungen eine Anwendung innerhalb eines Zugriffs erhält. Sie begrenzen den Zugriff auf spezifische APIs und Funktionen. Folgende Scopes werden aktuell unterstützt:
Scope | Bedeutung |
---|---|
openid | Zugriff auf die OpenID-Identität des Benutzers (bei OIDC) |
offline | Ermöglicht das Anfordern von Refresh Tokens |
entitlements.read | Erlaubt das Abrufen des Entitlements Endpunkt |
Scopes werden sowohl bei der Autorisierungsanfrage als auch bei der Anlage des Oauth2 Clients angegeben.
OpenID Connect
OpenID Connect erweitert die Authentifizierungsfunktionen von OAuth, indem es Komponenten wie ein ID-Token einfĂĽhrt, das als JSON Web Token (JWT) ausgegeben wird.
OpenID Connect ermöglicht eine standardisierte Authentifizierung, indem es auf OAuth 2.0 aufbaut und sicherstellt, dass Anwendungen die Identität eines Benutzers vertrauenswürdig verifizieren können.
Um OpenID Connect zu verwenden, muss der Scope openid
hinzugefĂĽgt werden. AnschlieĂźend wird beim Abruf der Tokens ebenfalls ein ID Token zurĂĽckgegeben.
ID Token
Das ID-Token ist konzeptionell mit einem Personalausweis vergleichbar, da es eine Reihe von JSON-Claims über den Benutzer enthält, wie zum Beispiel:
- sub (Subject) – Eindeutige Kennung des Benutzers
- name – Vollständiger Name des Benutzers
- email – E-Mail-Adresse des Benutzers
- iat (Issued At) – Zeitpunkt, zu dem das Token ausgestellt wurde
- exp (Expiration) – Ablaufzeit des Tokens
- iss (Issuer) – Identitätsanbieter (IdP), der das Token ausgestellt hat
- aud (Audience) – Die Zielanwendung, für die das Token bestimmt ist
Validierung ID Token (JWK)
Der ID Token kann mit Hilfe der JWK Keys validiert werden. Der notwendige Endpunkt hierfĂĽr lautet: https://oauth2.coreapi.io/.well-known/jwks.json
, https://oauth2.preview.coreapi.io/.well-known/jwks.json
.
ID Tokens dĂĽrfen nicht fĂĽr API-Zugriffe verwendet werden.
OpenID Connect Logout
Folgende Flows werden aktuell unterstĂĽtzt:
Feature | Front-Channel | Back-Channel |
---|---|---|
Logout-Mechanismus | Benutzer wird per Browser weitergeleitet | Server-zu-Server-Anfrage |
Client-Session beenden | Durch Cookie- oder Session-Invalidierung im Browser | Direkt auf dem Server (z. B. Token-Revokation) |
Browser benötigt? | Ja | Nein |
Geeignet fĂĽr | Web-Apps mit Session-basiertem Login | Sicherheitssensitive Anwendungen ohne Client-Side-Interaktion |
OpenID Connect Front-Channel Logout 1.0
Hierfür benötigen wir eine Logout URI
. Teile uns diese bitte mit.
Funktionsweise:
- Wenn sich ein Benutzer abmeldet, leitet Fynn den User-Agent (Browser) an die registrierte
Logout URI
weiter. - Die OAuth2-Client-Anwendung kann den Benutzer dann auch in deinem eigenen System abmelden, z. B. durch:
- Löschen eines Authentifizierungs-Cookies
- Invalidieren der Benutzersitzung
OpenID Connect Back-Channel Logout 1.0
Hierfür benötigen wir eine `Logout URI“. Teile uns diese bitte mit.
Beim Abmelden eines Benutzers wird eine HTTP-POST-Anfrage mit dem Content-Type application/x-www-form-urlencoded und einem logout_token
an die konfigurierte URL gesendet.
Das logout_token ist ein JWT, das mit demselben SchlĂĽssel signiert ist, der auch fĂĽr die Signierung von OpenID Connect ID-Tokens verwendet wird.
Daher sollte das logout_token mithilfe des öffentlichen Schlüssels für ID-Tokens validiert werden, welcher über /.well-known/jwks.json
abgerufen werden kann.
Das logout_token enthält die folgenden Claims:
- iss (Issuer) – Identifikator des ausstellenden OpenID-Providers:
https://oauth2.coreapi.io
oderhttps://oauth2.preview.coreapi.io
- aud (Audience) – Die Client-ID des OAuth2-Clients, für den dieses Logout-Token bestimmt ist.
- iat (Issued At) – Zeitpunkt, zu dem das Token ausgestellt wurde. Kann verwendet werden, um das Alter des Tokens zu bestimmen.
- jti (JWT ID) – Eindeutige Kennung des JWTs, um Replay-Angriffe zu verhindern. Das Token sollte nur einmal verwendet werden.
- events – Enthält den Eintrag http://schemas.openid.net/event/backchannel-logout. Dies deklariert, dass das JWT ein Logout-Token ist. Der entsprechende Wert MUSS ein JSON-Objekt sein und SOLLTE sein (leeres JSON-Objekt).
- sid (Session ID) – Eine Sitzungs-ID, die eine bestimmte Sitzung mit einem ID-Token verknüpft. Diese wird beim Logout-Aufruf als Parameter übergeben.
Was this page helpful?