feat(mcp): configuration authlib (grants + PKCE + DCR, #114)

- AuthorizationCodeGrant avec PKCE requis (CodeChallenge), RefreshTokenGrant
  avec rotation + re-vérification d'abonnement, DCR (ClientRegistrationEndpoint)
  et révocation (RevocationEndpoint) câblés sur le store sqlite (Tasks 1-3),
  metadata (Task 5) et consent.subscription_ok (Task 6).
- _Token (dict + check_client/get_scope) fait le pont entre les rows sqlite
  bruts et le protocole TokenMixin qu'authlib 1.7.2 attend pour le refresh
  et la révocation.
This commit is contained in:
Colin Maudry
2026-07-13 14:12:03 +02:00
parent 7dea07a30f
commit 0970803e5e
2 changed files with 240 additions and 0 deletions
+12
View File
@@ -0,0 +1,12 @@
from flask import Flask
from src.mcp.oauth import server
def test_create_authorization_server(monkeypatch, tmp_path):
monkeypatch.setenv("USERS_DB_PATH", str(tmp_path / "u.sqlite"))
monkeypatch.setenv("APP_BASE_URL", "https://colibre.fr")
app = Flask(__name__)
app.config["SECRET_KEY"] = "x"
srv = server.create_authorization_server(app)
assert srv is not None