Aller au contenu

Capability Auth

Authentification JWT Keycloak mutualisée FastAPI et FastMCP.

Objectif

Centraliser la validation JWT pour éviter une logique différente entre API, MCP et tenants.

Adapter

Adapter Usage
keycloak JWT RS256 via JWKS Keycloak et Swagger UI OAuth2 PKCE

Commande

Bash
1
2
3
4
5
6
7
8
arclith-cli add-adapter \
  --capability auth \
  --adapter keycloak \
  --param url=http://keycloak:8080 \
  --param realm=rekipe \
  --param audience=rekipe-api \
  --param client_id=swagger-public \
  --yes

Configuration Générée

YAML
1
2
3
4
5
# config/adapters/inbound/keycloak.yaml
url: "http://keycloak:8080"
realm: "rekipe"
audience: rekipe-api
client_id: swagger-public

Utiliser Dans L'API

Python
1
2
3
4
from fastapi import APIRouter, Depends

require_auth = arclith.auth_dependency()
router = APIRouter(dependencies=[Depends(require_auth)])

Utiliser Dans MCP

Python
require_auth = arclith.auth_dependency(transport="mcp")

L'auth MCP nécessite un transport HTTP/SSE qui expose les headers.

Règles

  • Vérifier signature, expiration, issuer et audience.
  • Utiliser Redis pour le cache JWKS en multi-worker.
  • Garder les décisions métier dans les policies ou use cases.
  • Ne pas coder de secret client dans Swagger UI: le client PKCE est public.
  • Coupler avec license quand un rôle applicatif est obligatoire.

Validation

Bash
uv run pytest
curl -fsS http://keycloak:8080/realms/rekipe/.well-known/openid-configuration

Le POC Keycloak du tutoriel Todo fournit un realm importable, un client public PKCE et un smoke réel du JWKS, des rôles et des claims.

Suite

Lire Auth production, puis Authentification & Autorisation.