OAuth 2.1
SuperSpace draait een standaard OAuth 2.1-autorisatieserver. Gebruik die voor apps van derden die namens een gebruiker handelen; gebruik API-sleutels voor first-party- / server-to-server-integraties.
OAuth-accesstokens zijn nooit admin en zijn fail-closed: een endpoint dat geen scope declareert, is niet beschikbaar via OAuth, en een token waaraan een vereiste scope ontbreekt, wordt geweigerd. Session- en API-sleutel-credentials omzeilen scope- controles volledig.
Authorization Server Metadata
De metadata is per merk, afgeleid van de request-host.
GET /.well-known/oauth-authorization-server
Teruggegeven params
- issuer: String
- authorization_endpoint: String |
https://<host>/oauth/authorize - token_endpoint: String |
https://<host>/oauth/token - revocation_endpoint: String |
https://<host>/oauth/revoke - introspection_endpoint: String |
https://<host>/oauth/introspect - registration_endpoint: String |
https://<host>/oauth/registration - response_types_supported: Array |
["code"] - grant_types_supported: Array |
["authorization_code", "refresh_token"] - code_challenge_methods_supported: Array |
["S256"] - token_endpoint_auth_methods_supported: Array |
["client_secret_basic", "client_secret_post", "none"] - scopes_supported: Array | zie Scopes
- service_documentation: String
Flows
- Grant types: alleen
authorization_codeenrefresh_token. - PKCE is verplicht (alleen
S256). - Refresh tokens roteren — het vorige refresh token wordt bij gebruik ingetrokken. De rotatie gaat pas door zodra het nieuwe access token is gevalideerd tegen de merk-, proef- en rolcontroles.
- Geen OpenID Connect — er is geen
/.well-known/openid-configuration, geen userinfo, geen ID-tokens. De OIDC-gem is alleen aangesloten voor Dynamic Client Registration. - Merkisolatie — een token is gebonden aan het merk (hostnaam) waaronder het is uitgegeven en wordt op elk ander merk geweigerd. Het autorisatiescherm toont alleen de niet-proefaccounts van de gebruiker op het huidige merk.
Tokenintrekking bij rolwijziging
Het verwijderen van de rol van een gebruiker op een account trekt diens OAuth-tokens (en sessies) voor dat account in.
Dynamic Client Registration (DCR)
POST /oauth/registration (RFC 7591)
Alleen publieke PKCE-clients zijn toegestaan — token_endpoint_auth_method moet
"none" zijn.
Fouten
- 400
{"error":"invalid_client_metadata", ...}|token_endpoint_auth_methodis niet"none" - 429
{"error":"too_many_requests", ...}| per-IP-limiet van 50 registraties / uur overschreden
Scopes
Er zijn geen standaardscopes — de aanwezigheid van een token is identiteit, en elke resource-scope is opt-in.
| Scope | Verleent |
|---|---|
sites:read |
Site-reads + geneste site-reads (show/index, back-uplijst, cachestatus, CDN-status, variantenlijst, taken, edge-rules-lijst, Shield-reads, logs, metrics) |
sites:write |
Site- + geneste site-writes (create/update/destroy, back-ups, cache, restart, restore, edge rules, Shield-writes, certificaten, site-domain-CRUD, variantwijziging) |
domains:read |
Domeinen list/show/query/available; domain-registration index/show/check/suggestions; contacts/hosts/processes reads |
domains:write |
Domain-registration-mutaties; domain-contact create/update/destroy/resend; host/process writes |
dns:read |
DNS-zones index/show/dns_stats; DNS-records index/show |
dns:write |
DNS-zone & -record create/update/destroy |
billing:read |
Orders index/show; subscriptions index/show; carts show |
GET /api/about accepteert elk geldig token, ongeacht scope.
Endpoints die niet beschikbaar zijn via OAuth
Deze declareren geen scope en zijn fail-closed — ze vereisen een session- of
API-sleutel-credential en geven 403 endpoint not available via OAuth terug voor elk
OAuth-token:
- Account-CRUD & account-rollen
- API-sleutels
- Gebruikers en
user_roles - De globale taken-endpoints (
GET /api/tasks/:id) - SSO (per-site en top-level)
- Rapporteren van een taakresultaat (
POST /api/webhooks/task/{task-id}) - De domain-order-endpoints:
POST /api/orders/domainenPOST /api/domain_registrations/:id/registrant_change(beide plaatsen een betaalde order en vereisen een gebruiker-gescopete API-sleutel —registrant_changeis bewust uitgesloten van dedomains:write-scope) - Alle write-operaties op orders/sites-facturatie (er is bewust geen
billing:write-scope)
Scope-handhavingsfouten
Fouten
- 401
{"error":"invalid_token","error_description":"token audience is not valid for /api"}| het token draagt eenresource-audience (RFC 8707) die voor een andere resource is uitgegeven (bijv. de MCP-server) —/apiweigert het vóór de scope-controle - 403
{"error":"insufficient_scope","error_description":"requires scope: <required>"}| met headerWWW-Authenticate: Bearer error="insufficient_scope", scope="<required>" - 403
{"error":"insufficient_scope","error_description":"endpoint not available via OAuth"}| endpoint declareert geen scope