Aller au contenu

Authentification

Chaque appel /osl/* porte un token JWT Bearer. Le moteur autorise selon les scopes et roles du token, et le point d’application des politiques applique l’ACL de l’appelant server-side.

Authorization: Bearer <jwt>

Le JWT porte :

Claim Signification
chain[] La chaîne de délégation, racine → feuille (le sujet agissant est le dernier maillon)
sub Optionnel ; s’il est présent, doit être égal à chain[-1]
roles[] Roles assignés
tenant La cellule du tenant
scopes[] osl:read, osl:write, osl:execute, osl:admin
exp Expiration (requise)

L’accès est évalué sur une chaîne de sujets (racine → feuille), pas une seule identité — voir Accès et capacités. La chaîne est à l’intérieur du payload signé (HS256), de sorte qu’un appelant ne peut ni la raccourcir ni la falsifier sans casser la signature :

{
"iss": "opendome",
"chain": ["ana@company.com", "agent://copilot-finance"],
"roles": ["analyst"],
"iat": 1750000000,
"exp": 1750000300
}
Édition Émetteur
OSS standalone Apache-2.0 La cellule génère des tokens HS256 localement. Le chart tenant-semantic-api génère un Secret de signature ; utilisez scripts/osl-token.sh <tenant> --roles <r> pour en générer un. Le moteur standalone ne fait pas confiance à l’en-tête X-Actor-Roles — un appelant venant d’un Ingress public ne peut pas falsifier de roles.
Enterprise / managed Enterprise Le control-plane émet et fait tourner les JWTs. Vous pouvez aussi placer devant le moteur votre propre proxy avec conscience de l’IdP qui pose X-Actor-Roles et activer auth.trustActorRolesHeader=true (BYO-OIDC).

Valeurs par défaut, par sujet :

Endpoint Limite
POST /osl/query 60 rps
POST /osl/sample 30 rps
GET /osl/schema 5 rps (caché)

Dépassé → 429 Too Many Requests avec Retry-After. Les limites se configurent par tenant dans le tier géré.

Chaque requête — 200 ou non — produit une entrée d’audit immuable et chaînée par hash avec request_id, le sujet, l’action, les FQNs des objets touchés, la décision et un timestamp.