OAuth 2.0- und OpenID-Connect-Endpunkte

Status: planned. Diese Seite beschreibt die Protokolloberfläche jeder KeenAuth-Umgebung, wie sie im Plan (§13) festgelegt ist. Die Endpunkte werden in Phase 2 entwickelt und sind in einer gehosteten Umgebung noch nicht verfügbar. Details können sich vor der allgemeinen Verfügbarkeit noch ändern.

Jede Umgebung ist ein eigener OAuth-2.0-Autorisierungsserver und OpenID-Connect-Provider. Die Endpunkte gehören nicht zur Management-API: Sie liegen auf dem Umgebungs-Host https://<environment-slug>.<region>.keenauth.app oder auf Ihrer verifizierten eigenen Domain. In der Tabelle ist <issuer> der Issuer der Umgebung, also der Wert von issuer im Discovery-Dokument.

Endpunkte

Endpunkt Methode und Pfad Client-Authentifizierung
Discovery GET <issuer>/.well-known/openid-configuration und GET <issuer>/.well-known/oauth-authorization-server (RFC 8414, gleicher Inhalt) Keine
Schlüssel GET <issuer>/.well-known/jwks.json Keine
Autorisierung GET oder POST <login host>/oauth2/authorize Keine (Browser)
Pushed Authorization Request (RFC 9126) POST <issuer>/oauth2/par Erforderlich für vertrauliche Clients; client_id für öffentliche Clients
Token POST <issuer>/oauth2/token Erforderlich für vertrauliche Clients; client_id für öffentliche Clients (DPoP ist optional)
Geräteautorisierung (RFC 8628) POST <issuer>/oauth2/device_authorization Wie beim Token-Endpunkt
Widerruf (RFC 7009) POST <issuer>/oauth2/revoke Wie beim Token-Endpunkt
Introspection (RFC 7662) POST <issuer>/oauth2/introspect Nur vertrauliche Clients
UserInfo GET oder POST <issuer>/oauth2/userinfo Bearer- oder DPoP-Access-Token
Sitzungsende GET oder POST <login host>/oauth2/logout Keine (id_token_hint oder client_id)

<login host> ist jede Anmelde-Domain der Umgebung: der Standard-Host oder eine hinzugefügte eigene Domain. Das Discovery-Dokument wird nur auf dem Issuer-Host ausgeliefert. Auf einem anderen Anmelde-Host liefert /.well-known/openid-configuration den Status 404 mit der Issuer-URL im Body.

Grant-Typen

Grant Verwendung
authorization_code Anmeldung im Browser und in nativen Apps. PKCE mit S256 ist erforderlich.
refresh_token Erneuert Token. Bei jeder Verwendung wird das Refresh-Token rotiert; die Wiederverwendung eines alten Tokens widerruft die gesamte Token-Familie.
client_credentials Zugriff von Maschine zu Maschine.
urn:ietf:params:oauth:grant-type:device_code Geräte ohne Tastatur, etwa ein Fernseher oder ein Kommandozeilenwerkzeug.
urn:ietf:params:oauth:grant-type:token-exchange Delegation und Identitätswechsel zwischen Diensten.

Implicit Flows (response_type=token und alles, was id_token enthält), der Resource-Owner-Password-Credentials-Grant und Hybrid-Response-Typen werden nicht unterstützt, weder jetzt noch später. RFC 9700 untersagt die ersten beiden.

Geräteautorisierung

Ein Gerät ohne Browser startet den Ablauf mit POST <issuer>/oauth2/device_authorization. Nur Anwendungen vom Typ device oder native, die den Device-Grant ausdrücklich aufführen, können ihn verwenden. Die Antwort enthält einen device_code, einen user_code und eine Verifizierungsadresse. Die Person öffnet die Adresse auf einem anderen Gerät, meldet sich an und genehmigt die Anfrage. Währenddessen fragt das Gerät den Token-Endpunkt mit grant_type=urn:ietf:params:oauth:grant-type:device_code ab. Der user_code hat 8 Zeichen und wird als XXXX-XXXX angezeigt. Ein Gerätecode ist 10 Minuten gültig und funktioniert nur einmal. Das Gerät fragt höchstens alle 5 Sekunden ab; schnellere Abfragen werden mit slow_down beantwortet, was das Intervall um 5 Sekunden verlängert. Die verification_uri lautet https://<login host>/u/device. Vor der Genehmigung werden der Person die Anwendung, die angefragten Scopes und das Land des Geräts angezeigt, das die Anfrage gestartet hat.

Sicherheitsregeln

Die Umgebung folgt ohne Ausnahme dem OAuth 2.0 Security Best Current Practice (RFC 9700):

Sitzungen und Abmeldung

Nach einer erfolgreichen Anmeldung hält die Umgebung eine einzige Single-Sign-On-Sitzung in einem HttpOnly-Cookie auf dem Anmelde-Host vor. Anwendungen derselben Umgebung nutzen diese Sitzung wieder, sodass eine zweite Anwendung kein Passwort erneut abfragt, außer ihre Richtlinie verlangt eine stärkere oder neuere Authentifizierung. Ihr Code sieht das Cookie nie; er sieht nur die Autorisierungsantwort.

Der Endpunkt für das Sitzungsende (OpenID Connect RP-Initiated Logout 1.0) beendet diese Sitzung, widerruft die zugehörigen Refresh-Tokens und benachrichtigt die Anwendungen, die eine Back-Channel-Logout-Adresse registriert haben. Um die Sitzungen einer Person aus Ihrem Backend aufzulisten oder zu widerrufen, verwenden Sie die Sitzungs-Endpunkte der Management-API.

Hat sich die Person über eine Unternehmensverbindung angemeldet, fügen Sie der Anfrage zum Sitzungsende federated=true hinzu, damit sie auch beim Identitätsanbieter abgemeldet wird. Die Sitzung hier endet zuerst; danach wechselt der Browser zur Abmeldung beim Identitätsanbieter (SAML Single Logout oder der End-Session-Endpunkt des OpenID-Providers) und kehrt zur post_logout_redirect_uri zurück. Das geschieht nur, wenn für die Verbindung die Abmeldung beim Identitätsanbieter aktiviert ist und der Provider eine Logout-Adresse veröffentlicht. Andernfalls, oder wenn der Provider nicht erreichbar ist, funktioniert die Anfrage so, als wäre der Parameter nicht angegeben. Die Abmeldung beim Identitätsanbieter kann auch die anderen Anwendungen der Person beenden, die diesen Identitätsanbieter nutzen.