Autenticazione
Ogni chiamata /osl/* porta un token JWT Bearer. Il motore autorizza in base agli
scope e ai ruoli del token, e il punto di applicazione delle policy applica l’ACL
del chiamante server-side.
Authorization: Bearer <jwt>Il token
Sezione intitolata “Il token”Il JWT porta:
| Claim | Significato |
|---|---|
chain[] |
La catena di delega, radice → foglia (il soggetto agente è l’ultimo anello) |
sub |
Opzionale; se presente, deve essere uguale a chain[-1] |
roles[] |
Ruoli assegnati |
tenant |
La cella del tenant |
scopes[] |
osl:read, osl:write, osl:execute, osl:admin |
exp |
Scadenza (obbligatoria) |
La catena di delega
Sezione intitolata “La catena di delega”L’accesso viene valutato su una catena di soggetti (radice → foglia), non su una singola identità — vedi Accesso e capacità. La catena è dentro il payload firmato (HS256), così un chiamante non può accorciarla o falsificarla senza rompere la firma:
{ "iss": "opendome", "chain": ["ana@company.com", "agent://copilot-finance"], "roles": ["analyst"], "iat": 1750000000, "exp": 1750000300}Da dove arrivano i token
Sezione intitolata “Da dove arrivano i token”| Edizione | Emettitore |
|---|---|
| OSS standalone Apache-2.0 | La cella conia i token HS256 localmente. Il chart di tenant-semantic-api genera un Secret di firma; usa scripts/osl-token.sh <tenant> --roles <r> per coniarne uno. Il motore standalone non si fida dell’header X-Actor-Roles — un chiamante da un Ingress pubblico non può falsificare i ruoli. |
| Enterprise / gestito Enterprise | Il control-plane emette e ruota i JWT. Puoi anche anteporre al motore il tuo proxy con consapevolezza dell’IdP che imposta X-Actor-Roles e attivare auth.trustActorRolesHeader=true (BYO-OIDC). |
Rate limit
Sezione intitolata “Rate limit”Valori di default, per soggetto:
| Endpoint | Limite |
|---|---|
POST /osl/query |
60 rps |
POST /osl/sample |
30 rps |
GET /osl/schema |
5 rps (cacheato) |
Superato → 429 Too Many Requests con Retry-After. I limiti si configurano per
tenant nel tier gestito.
Ogni richiesta — 200 o no — produce una voce di audit immutabile e concatenata
tramite hash con request_id, soggetto, azione, gli FQN degli oggetti toccati, la
decisione e un timestamp.