smart_ide/docs/API/sso-gateway-api.md
Nicolas Cantu 68cb5737c5 feat(sso-gateway): add OIDC JWT gateway and proxy to micro-services
- New service smart-ide-sso-gateway (port 37148): JWKS verify, /health,
  /v1/token/verify, /v1/upstreams, /proxy/<key>/...
- CORS on JSON responses when SSO_CORS_ORIGIN is set; optional empty
  bearer for langextract upstream
- Docs: feature, API, repo index; wire sso-docv-enso and services scope
- Extend config/services.local.env.example with OIDC and gateway vars
2026-04-03 22:42:44 +02:00

53 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# API — smart-ide-sso-gateway
Écoute par défaut : **`127.0.0.1:37148`**. Configuration : `services/smart-ide-sso-gateway/.env.example`, agrégat [config/services.local.env.example](../../config/services.local.env.example).
## Authentification
| Route | Auth utilisateur |
|-------|------------------|
| `GET /health` | Aucune |
| `OPTIONS *` | Aucune (préflight CORS si `SSO_CORS_ORIGIN` défini) |
| Toutes les autres | `Authorization: Bearer <access_token>` OIDC (docv / Enso) |
## Endpoints
### `GET /health`
Réponse `200` : `{ "status": "ok", "service": "smart-ide-sso-gateway" }`.
### `GET /v1/token/verify`
Vérifie le Bearer utilisateur. Réponse `200` : `{ "valid": true, "claims": { ... } }` avec un sous-ensemble des claims (`sub`, `iss`, `aud`, `exp`, `iat`, `email`, `name`, `preferred_username`).
### `GET /v1/upstreams`
Liste les clés de proxy disponibles : `{ "upstreams": [ "orchestrator", ... ] }`.
### Proxy — `ANY /proxy/<upstream_key>/<path>`
- **`<upstream_key>`** : voir liste ci-dessus (`repos_devtools`, `orchestrator`, etc.).
- **`<path>`** : chemin transmis tel quel à lURL de base du service (ex. `/proxy/orchestrator/v1/...``http://ORCHESTRATOR_HOST:PORT/v1/...`).
- **Corps** : relayé pour les méthodes avec body (limite `SSO_GATEWAY_MAX_BODY_BYTES`, défaut 32 MiB).
- **Réponses derreur** : `401` si Bearer utilisateur absent ou invalide ; `404` si clé inconnue ; `503` si `local_office` est ciblé sans `LOCAL_OFFICE_API_KEY`.
Len-tête `Authorization` utilisateur nest **pas** transmis à lamont ; il est remplacé par le jeton de service configuré. Voir [sso-gateway-service.md](../features/sso-gateway-service.md).
## Variables denvironnement (passerelle)
| Variable | Rôle |
|----------|------|
| `OIDC_ISSUER` | Obligatoire — URL de lissuer OpenID |
| `OIDC_AUDIENCE` | Optionnel — audience attendue du JWT |
| `OIDC_JWKS_URI` | Optionnel — URI JWKS explicite |
| `SSO_GATEWAY_HOST` / `SSO_GATEWAY_PORT` | Bind HTTP |
| `SSO_CORS_ORIGIN` | Si défini, en-têtes CORS sur les réponses |
| `SSO_GATEWAY_MAX_BODY_BYTES` | Taille max du corps en entrée |
Les jetons et hôtes des micro-services : mêmes noms que dans `config/services.local.env.example`.
## Voir aussi
- [sso-docv-enso.md](../features/sso-docv-enso.md)
- [README du service](../../services/smart-ide-sso-gateway/README.md)