Authentification MCP
Les requêtes adressées au serveur Casdoor MCP sur /api/mcp sont authentifiées de la même manière que les requêtes adressées à l'API Casdoor. Cette page décrit comment un client découvre ce que le serveur exige, et comment chaque méthode d'authentification affecte les outils que le client peut appeler.
Découverte OAuth
Casdoor publie les métadonnées de ressource protégée OAuth 2.0 (RFC 9728), afin qu'un client MCP puisse déterminer quel serveur d'autorisation protège le point de terminaison MCP :
curl https://your-casdoor.com/.well-known/oauth-protected-resource
La réponse indique le nom du serveur d'autorisation :
{
"resource": "https://your-casdoor.com",
"authorization_servers": ["https://your-casdoor.com"],
"bearer_methods_supported": ["header"],
"scopes_supported": ["openid", "profile", "email"]
}
Pour obtenir les métadonnées d'une application unique, placez le nom de l'application dans le chemin d'accès :
curl https://your-casdoor.com/.well-known/my-app/oauth-protected-resource
Utilisez le point de terminaison spécifique à l'application lorsque les applications ont des exigences d'autorisation différentes.
Méthodes d'authentification
| Method | Tools that the client can call | Use it for |
|---|---|---|
| Access token | The tools that the scopes of the token allow. See MCP authorization and scopes | Automation and MCP clients. This is the recommended method |
| Client ID and client secret | The tools that the application may use | Service accounts |
| Session cookie | All tools, without scope checks | Interactive use in the browser |
Avec un jeton d'accès :
curl -X POST https://your-casdoor.com/api/mcp \
-H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Avec l'ID client et le secret client d'une application :
curl -X POST https://your-casdoor.com/api/mcp \
-u "CLIENT_ID:CLIENT_SECRET" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Requêtes non authentifiées
Casdoor répond à une requête vers /api/mcp qu'il n'autorise pas, par exemple une requête sans identifiants, avec HTTP 401 et l'en-tête :
WWW-Authenticate: Bearer realm="casdoor", resource_metadata="https://your-casdoor.com/.well-known/oauth-protected-resource"
resource_metadata est l'URL des métadonnées de la ressource protégée sur l'hôte de la requête, incluant le chemin de base de Casdoor. Le schéma est http lorsque l'hôte ne contient pas de point, comme localhost:8000, et https sinon. Un client MCP qui suit la spécification OAuth 2.0 lit les métadonnées depuis cette URL et démarre seul le flux d'autorisation.
Le corps de la réponse dépend de la requête :
| Request | Response |
|---|---|
A JSON-RPC request with an id | HTTP 401 with a JSON-RPC error, whose data gives the reason |
A JSON-RPC notification, without an id | HTTP 202 with an empty body |
A body that isn't JSON-RPC, such as a GET request | HTTP 401 with an empty body |
Par exemple :
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32001,
"message": "Unauthorized",
"data": "Unauthorized operation"
}
}
Le point de terminaison proxy d'un serveur MCP externe, /api/server/<organization>/<server-name>, répond de la même manière pour les requêtes GET et POST.