Der Benutzer meldet sich dazu im Admin Interface an, prüft die angefragten Berechtigungen und erteilt der Anwendung seine Zustimmung. Die Anwendung erhält anschließend ein
access_token, das nur die freigegebenen Berechtigungen enthält.
Unterstützte Methoden
Angabe aller unterstützten Methoden.Allgemein
Der Autorisierungsserver folgt OAuth 2.1 und unterstützt ausschließlich den Authorization Code Flow mit PKCE (MethodeS256). Clients sind öffentliche Clients: Sie authentifizieren sich am Token-Endpunkt nicht mit einem Client-Secret, sondern ausschließlich über den code_verifier.
Ablauf
- Der Client ruft die Server-Metadaten (
GET .well-known/oauth-authorization-server) ab und ermittelt daraus die URLs des Autorisierungs- und Token-Endpunkts. - Der Client leitet den Browser des Benutzers auf
GET oauth/authorizeweiter. - Die REST-API prüft die Anfrage und leitet den Browser auf die Zustimmungsseite im Admin Interface weiter. Ist der Benutzer nicht angemeldet, meldet er sich zunächst an.
- Auf der Zustimmungsseite wählt der Benutzer die Berechtigungen aus, die er der Anwendung erteilen möchte, und bestätigt oder lehnt die Anfrage ab.
- Der Browser wird an die
redirect_urides Clients zurückgeleitet – bei Zustimmung mit einem Autorisierungscode (code), bei Ablehnung mit dem Fehleraccess_denied. - Der Client tauscht den Autorisierungscode über
POST oauth/tokengegen einaccess_tokenund einrefresh_token.
access_token wird wie bei der regulären Anmeldung im Header X-Authorization mitgesendet (siehe API Basics).
Client-Registrierung
Eine vorherige Registrierung des Clients im Shop ist nicht erforderlich. Alsclient_id dient eine HTTPS-URL, unter der der Client ein JSON-Dokument mit seinen Metadaten bereitstellt (Client ID Metadata Document). Das Dokument muss mindestens die Felder client_id, client_name und redirect_uris enthalten. Der Wert von client_id im Dokument muss exakt der URL entsprechen, unter der das Dokument abgerufen wird.
redirect_uri einer Autorisierungsanfrage wird exakt mit den im Dokument hinterlegten redirect_uris verglichen. Bei Loopback-Adressen (z. B. http://127.0.0.1/callback) darf lediglich der Port abweichen.
Scopes
Ein Scope entspricht genau einem Recht eines Berechtigungsbereichs und hat die Form<bereich>:<recht>, z. B. configuration:read. Die verfügbaren Scopes ergeben sich aus den Rechten, die für Benutzerkonten vergeben werden können (siehe API-Referenz Benutzerverwaltung), und werden in den Server-Metadaten unter scopes_supported aufgelistet.
Ein Benutzer kann nur Scopes erteilen, deren Rechte er selbst besitzt. Das ausgestellte access_token enthält ausschließlich die erteilten Rechte, auch wenn das Benutzerkonto weitergehende Rechte besitzt. Der Scope admin:active entspricht dem Vollzugriff und kann nur von Administratoren erteilt werden.
Gültigkeitsdauer
Die Autorisierungsanfrage (Parameterrequest der Zustimmungsseite) ist 10 Minuten gültig, der Autorisierungscode 1 Minute. Der Autorisierungscode kann nur einmal eingelöst werden. Auch ein refresh_token ist nur einmal verwendbar: Bei jeder Erneuerung wird ein neues refresh_token ausgegeben und das bisherige ungültig.
Verwendung der Methoden
GET .well-known/oauth-authorization-server
Dieser Endpunkt liefert die Metadaten des Autorisierungsservers gemäß RFC 8414. Er ist ohne Anmeldung erreichbar.Beispiel
Antwort
GET oauth/authorize
Dieser Endpunkt ist der Einstiegspunkt des Autorisierungsablaufs. Er wird ohne Anmeldung vom Browser des Benutzers aufgerufen, prüft die Anfrage und leitet bei Erfolg auf die Zustimmungsseite im Admin Interface weiter. Die Anfrage wird über die Query-Parameterresponse_type (immer code), client_id, redirect_uri, code_challenge und code_challenge_method (immer S256) beschrieben. Optional können über den Parameter scope die gewünschten Scopes durch Leerzeichen getrennt angegeben werden. Wird scope nicht angegeben, entscheidet der Benutzer auf der Zustimmungsseite allein über die erteilten Rechte. Der optionale Parameter state wird bei der Rückleitung unverändert an den Client zurückgegeben, ebenso wird der optionale Parameter resource übernommen.
Beispiel
Antwort
Bei Erfolg wird der Browser auf die Zustimmungsseite des Admin Interface weitergeleitet:Fehlercodes
GET oauth/authorize/{request}
Dieser Endpunkt liefert die Angaben zu einer offenen Autorisierungsanfrage, die auf der Zustimmungsseite angezeigt werden. Er wird vom Admin Interface aufgerufen und erfordert eine Anmeldung.Beispiel
Antwort
Fehlercodes
POST oauth/authorize/{request}/approve
Dieser Endpunkt erteilt einer offenen Autorisierungsanfrage die Zustimmung. Er wird vom Admin Interface aufgerufen und erfordert eine Anmeldung. Es wird ein Autorisierungscode für das angemeldete Benutzerkonto erzeugt und die URL zurückgegeben, auf die der Browser zum Client weitergeleitet werden muss. Die URL enthält die Parametercode, state (sofern angegeben) und iss.
Im Request Body werden die erteilten Scopes übergeben. Es können nur Scopes erteilt werden, die der Client angefragt hat (oder beliebige, wenn der Client keine angefragt hat) und deren Rechte das angemeldete Benutzerkonto selbst besitzt.
Beispiel
Request Body
Antwort
Fehlercodes
POST oauth/authorize/{request}/deny
Dieser Endpunkt lehnt eine offene Autorisierungsanfrage ab. Er wird vom Admin Interface aufgerufen und erfordert eine Anmeldung. Es wird kein Autorisierungscode erzeugt. Zurückgegeben wird die URL, auf die der Browser zum Client weitergeleitet werden muss. Die URL enthält den Parametererror=access_denied sowie state (sofern angegeben) und iss.
Beispiel
Request Body
Antwort
Fehlercodes
POST oauth/token
Dieser Endpunkt stellt einaccess_token und ein refresh_token aus. Er ist ohne Anmeldung erreichbar. Anders als die übrigen Endpunkte der REST API erwartet er keinen JSON-Body, sondern formularkodierte Parameter (application/x-www-form-urlencoded).
Über den Parameter grant_type wird festgelegt, ob ein Autorisierungscode eingelöst (authorization_code) oder ein bestehendes Token erneuert wird (refresh_token). Beim Einlösen eines Autorisierungscodes werden zusätzlich code, client_id, redirect_uri und code_verifier übergeben, wobei client_id und redirect_uri mit der ursprünglichen Autorisierungsanfrage übereinstimmen müssen. Beim Erneuern werden refresh_token und client_id übergeben. Ein refresh_token wird nur von dem Client akzeptiert, für den es ausgestellt wurde.
