| 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)
- 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.
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
offlinenotwendig. - 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
openidnotwendig. - 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
- Benutzer meldet sich an Der Benutzer wird zum Login-Formular von Fynn weitergeleitet. Nach der Anmeldung fragt Fynn, ob die Anwendung Zugriff erhalten darf.
- Anwendung tauscht den Code gegen ein Access Token Die Anwendung sendet nun eine POST-Anfrage an den Autorisierungsserver:
Refresh Token
Wenn das Access Token ablĂ€uft, kann die Anwendung ein neues Token mit einem Refresh Token anfordern: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 |
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 Scopeopenid 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
Decoded ID Token
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.
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 eineLogout URI. Teile uns diese bitte mit.
Funktionsweise:
- Wenn sich ein Benutzer abmeldet, leitet Fynn den User-Agent (Browser) an die registrierte
Logout URIweiter. - 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 einemlogout_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.iooderhttps://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.