Konzept
OAuth 2.1 mit Dynamic Client Registration
knowmind ist ein OAuth-2.1-Provider mit Dynamic Client Registration nach RFC 7591. Damit registrieren sich Custom Connectoren in Claude.ai, ChatGPT und Cursor automatisch — ohne dass jemand vorher manuell einen Client anlegt oder ein Secret hinterlegt.
Worum es geht
Klassische OAuth-Setups verlangen eine vorab konfigurierte Client-Anwendung: Client-ID, Client-Secret und eine fest hinterlegte Redirect-URI. Für Custom Connectoren in Browser-KI ist das unpraktisch, weil die Anwendung erst beim Hinzufügen durch die Nutzerin entsteht. Die IETF hat dafür RFC 7591 spezifiziert: Der Client registriert sich beim Authorization-Server dynamisch zur Laufzeit. knowmind erlaubt das ausschließlich für Custom Connectoren mit Redirect-URIs aus einer Allowlist MCP-fähiger Plattformen.
Sequenz im Detail
- Discovery: Der Connector liest die OAuth-Discovery-Metadaten unter
/.well-known/oauth-authorization-server. knowmind antwortet mit allen Endpoints, unterstützten Grant-Types und der PKCE-Anforderung S256. - Registrierung: Der Connector ruft
POST /oauth/registermit seinem Namen und seinen Redirect-URIs. knowmind prüft die URIs gegen die Allowlist (siehe Tabelle unten), legt einen oauth_clients-Eintrag mittenant_id = NULLan und gibt eine Client-ID zurück. Ein Client-Secret wird nicht erzeugt — Public Client mit PKCE. - Authorization-Request: Der Connector schickt die Nutzerin auf
/oauth/authorizemitresponse_type=code,client_id,redirect_uri,scope, einem zufälligenstatesowie einemcode_challenge(Base64-URL-encoded SHA-256-Hash über den vom Connector lokal gehaltenencode_verifier) undcode_challenge_method=S256. - Login und Zustimmung: Wenn die Nutzerin noch nicht angemeldet ist, leitet knowmind sie auf
/signinum. Magic-Link in der Mailbox, Bestätigung, Rücksprung. Bei diesem ersten Authorize-Vorgang wird dietenant_iddes oauth_clients-Eintrags fest auf den Tenant der eingeloggten Nutzerin gesetzt — spätere Authorize-Flows mit derselben Client-ID müssen denselben Tenant treffen. - Authorization-Code: knowmind erzeugt einen kurzlebigen Code (10 Minuten gültig), persistiert ihn mit
code_challenge,redirect_uri,user_idundtenant_id, und leitet den Connector mit?code=…&state=…zurück. - Token-Tausch: Der Connector ruft
POST /oauth/tokenmitgrant_type=authorization_code, dem erhaltenen Code, der ursprünglichenredirect_uri, seinerclient_idund demcode_verifierauf. knowmind verifiziert PKCE (SHA-256 übercode_verifiergleichcode_challenge), konsumiert den Code und gibt einen normalen kmt_-Access-Token zurück, gültig 30 Tage. - MCP-Aufrufe: Bei jedem MCP-Aufruf trägt der Connector den Token im
Authorization: Bearer kmt_…-Header. Die übliche Tenant-Isolation greift — der Token sieht ausschließlich den Tenant, den die Nutzerin beim Authorize-Vorgang autorisiert hat.
Allowlist der erlaubten Redirect-Hosts
knowmind akzeptiert nur Redirect-URIs auf folgenden Hosts (HTTPS Pflicht, Ausnahme localhost für Entwicklung):
| Host | Plattform | Subdomain-Matching |
|---|---|---|
| claude.ai | Claude (Anthropic) — Custom Connectoren | ja |
| claude.com | Claude (Anthropic) — alternativer Host | ja |
| chat.openai.com | ChatGPT (alter Host) | ja |
| chatgpt.com | ChatGPT — Custom Actions / Connectoren | ja |
| cursor.sh | Cursor — MCP-Integration | ja |
| cursor.com | Cursor — alternativer Host | ja |
| anysphere.com | Anysphere — Cursor-Hersteller | ja |
| 127.0.0.1 | Lokale Entwicklung (HTTP erlaubt) | nein |
| localhost | Lokale Entwicklung (HTTP erlaubt) | nein |
Subdomain-Matching: *.claude.ai wird akzeptiert, beispielsweise connectors.claude.ai. Andere Redirect-Hosts werden mit HTTP 400 und error: invalid_redirect_uri abgelehnt. Wer eine eigene Plattform anbinden möchte, beantragt die Aufnahme über info@schuebeler-consulting.de.
Tenant-Bindung beim ersten Login
Wenn ein Connector frisch registriert ist (per /oauth/register), kennt knowmind noch keinen Tenant — der Client-Eintrag trägt tenant_id = NULL. Beim ersten Authorize-Flow wird die tenant_id auf den Tenant der eingeloggten Nutzerin verdrahtet und ist danach unveränderlich. Versucht eine zweite Nutzerin desselben Connectors, sich mit einem anderen Tenant zu authentifizieren, antwortet knowmind mit HTTP 403 access_denied und der Hinweis-Meldung „Dieser OAuth-Client gehört zu einem anderen Arbeitsbereich".
Praktische Folge: Jede Nutzerin, die einen Custom Connector neu hinzufügt, durchläuft eine eigene DCR-Registrierung. Verschiedene Nutzerinnen desselben Tenants teilen sich nicht denselben Client-Eintrag.
Sicherheitsaspekte
- PKCE ist Pflicht. knowmind weist Authorize-Anfragen ohne
code_challengeoder mitcode_challenge_method ≠ S256mit HTTP 400 ab. Damit ist der Authorization-Code gegen Abfangen über offene Redirects oder kompromittierte Browser-Erweiterungen geschützt. - Keine Client-Secrets.
token_endpoint_auth_method = none. Public Client mit PKCE ersetzt das klassische Client-Secret. Damit ist die Vorab-Verteilung von Geheimnissen an Browser-Anwendungen unnötig. - Kurze Token-Laufzeiten. Access-Tokens leben 30 Tage, werden danach vom Connector über den Refresh-Pfad erneuert (Authorization Code Grant wird wiederholt durchlaufen, weil Refresh-Tokens im Standard-Flow nicht ausgegeben werden — der Connector startet den Authorize-Vorgang automatisch erneut).
- Widerruf jederzeit. Im Cockpit unter OAuth-Clients sehen Sie jeden registrierten Connector und können die Verbindung mit einem Klick widerrufen. Der Token wird sofort ungültig.
- State-Parameter Pflicht für CSRF-Schutz. Der Connector setzt einen zufälligen
state, knowmind spiegelt ihn beim Redirect zurück. Der Connector prüft die Übereinstimmung, sonst wird der Code verworfen.