Passer au contenu principal

URIs de redirection OAuth MCP pour Cursor, Claude et ChatGPT : Enregistrement des clients MCP dans Casdoor

· Lecture de 9 minutes
Yang Luo
Casdoor Maintainer

Chaque client MCP envoie sa propre URI de redirection lors de la connexion à un serveur MCP protégé par OAuth. Cursor desktop utilise http://localhost:8787/callback (les versions antérieures à mi-2026 utilisaient cursor://anysphere.cursor-mcp/oauth/callback), Cursor web et Cursor Cloud Agents utilisent https://www.cursor.com/agents/mcp/oauth/callback, claude.ai, les connecteurs Claude Desktop, Claude mobile et Cowork utilisent https://claude.ai/api/mcp/auth_callback, et ChatGPT utilise https://chatgpt.com/connector_platform_oauth_redirect ou un https://chatgpt.com/connector/oauth/<callback-id> par connexion. Si vous activez l'enregistrement dynamique des clients dans Casdoor, vous n'avez pas besoin de saisir ces valeurs : les clients s'enregistrent eux-mêmes ou fournissent à Casdoor un document de métadonnées d'ID client. Vous les ajoutez aux Redirect URLs uniquement lorsque vous créez manuellement une application Casdoor pour un client.

URIs de redirection par client​

ClientURI de redirectionComment il obtient un ID client de CasdoorNotes
Cursor desktop (actuel)http://localhost:8787/callbackDCR, ou auth.CLIENT_ID dans mcp.jsonPort fixe 8787
Cursor web et Cloud Agentshttps://www.cursor.com/agents/mcp/oauth/callbackDCR, ou auth.CLIENT_IDAvec DCR, l'application desktop enregistre cette URI et celle de localhost
Cursor desktop (versions anciennes)cursor://anysphere.cursor-mcp/oauth/callbackDCR, ou auth.CLIENT_IDCursor a rendu l'URI loopback par défaut en juillet 2026
claude.ai, connecteurs Claude Desktop, Claude mobile, Coworkhttps://claude.ai/api/mcp/auth_callbackCIMD, puis DCR, ou un ID client saisi dans la fenêtre de dialogue du connecteur personnaliséLes serveurs d'Anthropic effectuent les requêtes
Claude Codehttp://localhost:<port>/callback et http://127.0.0.1:<port>/callbackCIMDLe port change à chaque session
Claude Desktop via mcp-remotehttp://localhost:<port>/oauth/callbackDCRLe port est dérivé de l'URL du serveur
ChatGPThttps://chatgpt.com/connector_platform_oauth_redirect, ou https://chatgpt.com/connector/oauth/<callback-id>CIMD, DCR, ou un client prédéfiniCopiez la valeur exacte depuis ChatGPT

Ces valeurs proviennent de la documentation des fournisseurs au 2 novembre 2026 (voir Références). Les clients peuvent les modifier. En cas d'échec de connexion, lisez le paramètre redirect_uri de la demande d'autorisation dans la barre d'adresse du navigateur et comparez-le avec ce que Casdoor possède.

Le tableau s'applique à deux configurations : le serveur MCP intégré à Casdoor sur /api/mcp, et votre propre serveur MCP qui utilise Casdoor comme serveur d'autorisation. Dans les deux cas, le client découvre Casdoor via les métadonnées de ressource protégée (RFC 9728) et obtient son ID client auprès de Casdoor.

Option 1 : laisser les clients s'enregistrer eux-mêmes​

Casdoor prend en charge l'enregistrement dynamique des clients (RFC 7591) sur /api/oauth/register, ainsi que les documents de métadonnées d'ID client (CIMD), où le client_id est une URL HTTPS vers un document JSON listant les URI de redirection du client. Un seul interrupteur contrôle les deux : Enable dynamic client registration au niveau de l'organisation. Il est désactivé par défaut pour toutes les organisations, y compris built-in.

Avec cet interrupteur activé pour built-in, le document de découverte affiche ce que les clients recherchent :

curl -s https://your-casdoor.com/.well-known/openid-configuration | jq '{
registration_endpoint,
client_id_metadata_document_supported,
code_challenge_methods_supported,
token_endpoint_auth_methods_supported,
authorization_response_iss_parameter_supported
}'
{
"registration_endpoint": "https://your-casdoor.com/api/oauth/register",
"client_id_metadata_document_supported": true,
"code_challenge_methods_supported": ["S256"],
"token_endpoint_auth_methods_supported": ["client_secret_basic", "client_secret_post", "private_key_jwt", "none"],
"authorization_response_iss_parameter_supported": true
}

Chaque client choisit ensuite sa méthode :

  • Claude utilise CIMD uniquement si les métadonnées contiennent à la fois client_id_metadata_document_supported: true et none dans token_endpoint_auth_methods_supported. Casdoor propose les deux dès que l'interrupteur est activé, donc Claude s'identifie avec une URL de document et Casdoor crée une application nommée cimd_.... Sinon, Claude revient à DCR.
  • ChatGPT préfère CIMD, avec le client_id https://chatgpt.com/oauth/client.json (ou une variante spécifique au callback), et utilise DCR lorsque CIMD n'est pas disponible.
  • Cursor s'enregistre via DCR en tant que client public sans secret. La documentation de Cursor ne mentionne pas CIMD.
  • mcp-remote s'enregistre via DCR.

Les URI de redirection proviennent de la demande d'enregistrement ou du document de métadonnées, il n'y a donc rien à saisir. Les clients enregistrés fonctionnent sous un rôle restreint et leurs jetons ne peuvent pas appeler l'API de gestion. Consultez Enregistrement dynamique des clients pour connaître les règles complètes et l'organisation dans laquelle atterrit le client.

Option 2 : créer une application pour le client​

Si vous gardez l'enregistrement désactivé, créez une application par client afin de pouvoir les révoquer séparément :

  1. Dans la console d'administration Casdoor, allez dans Identity > Applications et ajoutez une application, par exemple cursor-mcp.
  2. Ajoutez les URI de redirection du client issus du tableau dans Redirect URLs. Pour Cursor, ajoutez les trois, car différentes installations de Cursor envoient des URI différents.
  3. Définissez Category sur Agent. Consultez Configurer Casdoor pour votre serveur MCP pour les scopes et les types d'autorisation.
  4. Fournissez le Client ID au client.

Un secret client est optionnel pour ces clients. Casdoor accepte un échange de code d'autorisation sans secret lorsque la demande utilisait PKCE, et Cursor, Claude et ChatGPT utilisent tous PKCE avec S256. Si un client envoie tout de même un secret, il doit être correct.

Où placer l'ID client :

  • Cursor : un objet auth dans ~/.cursor/mcp.json ou .cursor/mcp.json. Avec un CLIENT_ID statique, l'application de bureau Cursor envoie uniquement son URI de redirection localhost.

    {
    "mcpServers": {
    "casdoor": {
    "url": "https://your-casdoor.com/api/mcp",
    "auth": {
    "CLIENT_ID": "${env:CASDOOR_MCP_CLIENT_ID}",
    "scopes": ["application:read", "user:read"]
    }
    }
    }
    }
  • Claude : le champ d'ID client OAuth dans la boîte de dialogue du connecteur personnalisé. Enregistrez https://claude.ai/api/mcp/auth_callback.

  • ChatGPT : ChatGPT fonctionne également avec des clients OAuth prédéfinis. Copiez l'URI de redirection depuis la page de gestion du serveur MCP dans ChatGPT, car la forme utilisée dépend du serveur d'autorisation.

Guides étape par étape : Cursor, Claude Desktop, ChatGPT.

Comment Casdoor fait correspondre les URI de redirection​

Casdoor compare le redirect_uri d'une demande avec chaque entrée dans Redirect URLs :

  • Le schéma, l'hôte et le chemin doivent correspondre. La chaîne de requête n'est pas comparée.
  • Le port doit correspondre, sauf pour les hôtes boucle locale (loopback). Lorsque les deux URI utilisent le même hôte boucle locale (localhost, 127.0.0.1 ou ::1), Casdoor ignore le port, conformément à la RFC 8252 pour les applications natives. localhost et 127.0.0.1 sont des hôtes différents, donc Claude Code nécessite à la fois http://localhost/callback et http://127.0.0.1/callback.
  • Un URI de redirection sur un sous-domaine d'un hôte enregistré correspond également, donc https://example.com/cb accepte https://app.example.com/cb. Enregistrez l'hôte le plus spécifique possible.
  • Les schémas personnalisés tels que cursor:// correspondent selon les mêmes règles. Les URI javascript:, data: et vbscript: sont toujours rejetés.

Comme le port boucle locale est ignoré, un enregistrement mcp-remote ou Claude Code continue de fonctionner lorsque le port local change entre les sessions.

Emplacement de claude_desktop_config.json​

La documentation MCP fournit ces chemins. Dans Claude Desktop, Settings > Developer > Edit Config ouvre le fichier et le crée s'il est manquant.

Operating systemPath
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json
Linux~/.config/Claude/claude_desktop_config.json

Claude Desktop accède à un serveur MCP distant de deux manières, qui utilisent des URI de redirection différents :

  • En tant que connecteur, ajouté dans les paramètres de connecteur de Claude. Les serveurs d'Anthropic exécutent le flux OAuth, l'URI de redirection est https://claude.ai/api/mcp/auth_callback, et Casdoor doit être accessible depuis Internet.

  • Via claude_desktop_config.json, avec mcp-remote comme pont local. Le flux OAuth s'exécute sur votre ordinateur, et l'URI de redirection est http://localhost:<port>/oauth/callback :

    {
    "mcpServers": {
    "casdoor": {
    "command": "npx",
    "args": ["mcp-remote", "https://your-casdoor.com/api/mcp"]
    }
    }
    }

Quitter complètement Claude Desktop et le redémarrer après avoir modifié le fichier.

Les clients hébergés nécessitent un Casdoor public​

Les connecteurs ChatGPT et Claude appellent votre serveur MCP et Casdoor depuis les serveurs de leurs éditeurs, et non depuis votre ordinateur. Casdoor doit être accessible via HTTPS public avec un certificat valide. Les requêtes d'Anthropic proviennent de 160.79.104.0/21, si vous filtrez par IP. Cursor desktop, Claude Code et mcp-remote exécutent le flux localement, donc un Casdoor sur votre réseau fonctionne pour eux.

Deux autres points vérifiés par les clients hébergés, que Casdoor gère déjà :

  • Émetteur dans la réponse (RFC 9207) : ChatGPT rejette une réponse d'autorisation sans le champ iss correct, et utilise son URI de redirection stable uniquement avec les serveurs d'autorisation qui respectent ses exigences RFC 9207. Casdoor annonce cette prise en charge dans ses métadonnées et ajoute iss à la redirection.
  • Indicateurs de ressources (RFC 8707) : ChatGPT envoie resource avec l'URL du serveur MCP lors des demandes d'autorisation et de jeton. Casdoor place cette valeur dans la revendication aud du jeton d'accès, et votre serveur MCP doit la vérifier. Consultez Authentification MCP pour le flux de découverte.

Lectures connexes sur www.casdoor.com : OAuth pour les agents IA et serveurs d'autorisation pour MCP.

Références​