RevocationRequest requires client_secret, so public clients get 400 from /revoke
Les mainteneurs répondent en général sous 1 jour
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 2/5
- Temps estimé
- 1-3 heures
- Accessibilité débutants
- 88/100
- Type d'issue
- Bug
- Clarté
- Clairement spécifiée
- Activité
- Active
- Stack technique
- python
- Domaine
- api, authentication, backend
Piste de recherche
Le modèle du formulaire se trouve dans mcp/server/auth/handlers/revoke.py. Donnez à client_secret la valeur par défaut None (ou supprimez le champ) afin que pydantic ne le considère plus comme obligatoire, puis confirmez que ClientAuthenticator continue d’exiger des secrets uniquement pour les clients confidentiels. Reproduisez le problème avec un client public (token_endpoint_auth_method: none) qui envoie uniquement token et client_id à /revoke ; le travail est terminé lorsque cela renvoie 200 au lieu de 400 invalid_request.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Summary
POST /revoke answers 400 invalid_request to a public client (token_endpoint_auth_method: none) that sends only token and client_id, which is what RFC 7009 allows for a client without credentials.
Cause
In mcp/server/auth/handlers/revoke.py the form model is
class RevocationRequest(BaseModel):
token: str
token_type_hint: Literal["access_token", "refresh_token"] | None = None
client_id: str
client_secret: str | None
client_secret: str | None has no default, so pydantic treats the field as required (nullable, but it must be present). A public client omits it, RevocationRequest.model_validate(dict(form_data)) fails and the handler returns 400 before the provider's revoke_token is called. ClientAuthenticator already handles the secret on its own (it reads it from the form or the Basic header and demands it only for a client registered with one), so the model does not need the field at all, or it needs = None.
Reproduction
Register a client with token_endpoint_auth_method: "none", obtain tokens, then POST /revoke with token=<refresh token>&client_id=<id>. Expected 200, actual 400 {"error": "invalid_request", ...}. Claude Code registers this way and hit it (mcp 2.2.0).
Suggested fix
client_secret: str | None = None (or drop the field).
- Langage dominant
- Python
- Étoiles
- 24.5k
- Forks
- 4k
- Merge moyen
- 1 j 13 h
- PR mergées (30 j)
- 35
Préparer son environnement
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de modelcontextprotocol/python-sdk
-
v1 v2
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
modelcontextprotocol/python-sdk#3652 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
spec-2026-07-28 v2
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
modelcontextprotocol/python-sdk#3649 ·
Les mainteneurs répondent en général sous 1 jour
-
v1 v2
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
modelcontextprotocol/python-sdk#3639 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
P3
Difficulté 2/5 1-3 heures Accessibilité débutants 78/100
modelcontextprotocol/python-sdk#3597 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
v1 v2
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
modelcontextprotocol/python-sdk#3592 · 1 commentaire · 1 réaction ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de modelcontextprotocol/python-sdk
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
RedHatQE/mtv-api-tests#721 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 1-3 heures Accessibilité débutants 85/100
pytest-dev/pluggy#757 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 1/5 1-3 heures Accessibilité débutants 85/100
NousResearch/hermes-agent#134960 ·
Les mainteneurs répondent en général sous 1 jour
-
HTML backend: `<br>` leaks the internal sentinel U+E000 into list items, headings and captionsPeut-être pris @morten-lagabote l’a pris aujourd’hui. Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 67/100
docling-project/docling#4671 ·
Les mainteneurs répondent en général sous 1 jour