fix(mcp): refresh renvoie invalid_grant si abonnement perdu (#114)
This commit is contained in:
+11
-7
@@ -165,21 +165,25 @@ class RefreshTokenGrant(grants.RefreshTokenGrant):
|
|||||||
INCLUDE_NEW_REFRESH_TOKEN = True # rotation
|
INCLUDE_NEW_REFRESH_TOKEN = True # rotation
|
||||||
|
|
||||||
def authenticate_refresh_token(self, refresh_token):
|
def authenticate_refresh_token(self, refresh_token):
|
||||||
|
from src.mcp.oauth.consent import subscription_ok
|
||||||
|
|
||||||
row = store.get_token_by_refresh(_db(), refresh_token)
|
row = store.get_token_by_refresh(_db(), refresh_token)
|
||||||
if not row or row["revoked_at"] is not None:
|
if not row or row["revoked_at"] is not None:
|
||||||
return None
|
return None
|
||||||
if row["refresh_expires_at"] and _expired(row["refresh_expires_at"]):
|
if row["refresh_expires_at"] and _expired(row["refresh_expires_at"]):
|
||||||
return None
|
return None
|
||||||
|
# Re-vérifie l'abonnement au refresh ici (pas dans authenticate_user) :
|
||||||
|
# authlib traite un authenticate_refresh_token → None comme
|
||||||
|
# InvalidGrantError (invalid_grant), alors qu'un authenticate_user →
|
||||||
|
# None y devient InvalidRequestError (invalid_request). Claude exige
|
||||||
|
# invalid_grant pour redéclencher le flux OAuth quand l'abonnement
|
||||||
|
# est perdu.
|
||||||
|
if not subscription_ok(row["user_id"]):
|
||||||
|
return None
|
||||||
return _Token(row)
|
return _Token(row)
|
||||||
|
|
||||||
def authenticate_user(self, credential):
|
def authenticate_user(self, credential):
|
||||||
from src.mcp.oauth.consent import subscription_ok
|
return credential["user_id"]
|
||||||
|
|
||||||
uid = credential["user_id"]
|
|
||||||
# Re-vérifie l'abonnement au refresh : perdu → invalid_grant.
|
|
||||||
if not subscription_ok(uid):
|
|
||||||
return None
|
|
||||||
return uid
|
|
||||||
|
|
||||||
def revoke_old_credential(self, credential):
|
def revoke_old_credential(self, credential):
|
||||||
store.revoke_token(_db(), credential["id"])
|
store.revoke_token(_db(), credential["id"])
|
||||||
|
|||||||
Reference in New Issue
Block a user