OAuth-API-Referenz
Die OAuth-2.1-Endpunkte der Control Plane für MCP-Connectors: Discovery, dynamische Registrierung, Autorisierung, Token-Tausch mit PKCE, Refresh und Widerruf.
Zuletzt aktualisiert:
/.well-known/oauth-authorization-server
Metadaten nach RFC 8414. Auch mit dem Suffix `/v1/mcp` ausgeliefert.
/.well-known/oauth-protected-resource/v1/mcp
Metadaten nach RFC 9728 für den MCP-Endpunkt: `resource`, `authorization_servers`, `bearer_methods_supported`.
/oauth/register
Dynamische Client-Registrierung nach RFC 7591.
Registrierungs-Body
Zwanzig Registrierungen je Adresse und Stunde; die einundzwanzigste ist `rate_limited`.
| Name | Typ | Beschreibung |
|---|---|---|
redirect_uris
erforderlich
|
string[] | Jeweils `https://…` oder `http://127.0.0.1…` / `http://localhost…` für einen lokalen Client. Exakter Abgleich bei der Autorisierung. |
client_name
|
string | Wird auf dem Zustimmungsbildschirm gezeigt. |
token_endpoint_auth_method
|
string | Nur `none` wird akzeptiert: öffentliche Clients mit PKCE. Ein vertraulicher Client wird abgelehnt. |
grant_types
|
string[] | Teilmenge von `authorization_code`, `refresh_token`. |
/oauth/authorize
Startet den Ablauf. `response_type=code`, `client_id`, `redirect_uri`, `code_challenge` (43–128 Zeichen) mit `code_challenge_method=S256`, optional `state`, `scope` und `resource` (muss, wenn angegeben, das `/v1/mcp` dieses Servers sein). Ein unbekannter Client oder eine nicht passende Redirect-URI antwortet mit 400 ohne Weiterleitung; andere Fehler leiten mit `error` weiter. Erfolg leitet zur Zustimmungsseite des Dashboards.
/oauth/token
Formularkodiert oder JSON. `grant_type=authorization_code` mit `code`, `code_verifier`, `redirect_uri`, `client_id`; oder `grant_type=refresh_token` mit `refresh_token`. Fehler folgen RFC 6749: `invalid_grant`, `invalid_client`, `invalid_request`.
Token-Antwort
| Name | Typ | Beschreibung |
|---|---|---|
access_token
|
string | Ein Browserberg-API-Schlüssel der Art `oauth`. Eine Stunde. |
token_type
|
string | `Bearer`. |
expires_in
|
integer | 3600. |
refresh_token
|
string | Neunzig Tage, einmal verwendbar: Jeder Refresh liefert ein neues und zieht das alte ein. |
scope
|
string | Was gewährt wurde; heute `browserberg`. |
/oauth/revoke
`token` und optional `token_type_hint`. Widerruft ein Zugriffstoken oder ein Refresh-Token samt aller Zugriffstoken, die es erzeugt hat. Immer 200.
Discovery
BASE="https://browserberg.com"
# The discovery documents an MCP client reads on its own. No credential needed.
curl -s "$BASE/.well-known/oauth-authorization-server" \
| python3 -c 'import json,sys; d=json.load(sys.stdin); print("issuer:", d["issuer"]); print("authorize:", d["authorization_endpoint"].replace(d["issuer"], "")); print("token:", d["token_endpoint"].replace(d["issuer"], "")); print("pkce:", d["code_challenge_methods_supported"])'
curl -s "$BASE/.well-known/oauth-protected-resource/v1/mcp" \
| python3 -c 'import json,sys; d=json.load(sys.stdin); print("resource ends with:", d["resource"].rsplit("/", 2)[-2:])'
issuer: https://browserberg.com
authorize: /oauth/authorize
token: /oauth/token
pkce: ['S256']
resource ends with: ['v1', 'mcp']