Riferimento API
L’API Auris è un’API REST che fornisce accesso programmatico a tutte le funzionalità IAM: autenticazione, gestione utenti, ruoli, permessi, organizzazioni, autorizzazione fine-grained e altro. Tutte le risposte API usano JSON.
URL Base
https://api.altovar.net/apiSostituisci api.altovar.net con il dominio dove è deployato il tuo Auris. Se usi il servizio cloud Auris, il tuo dominio è quello mostrato nella Console sotto Impostazioni → Domini Personalizzati.
Autenticazione
Bearer Token
La maggior parte degli endpoint richiede un access token valido nell’header Authorization:
Authorization: Bearer <access_token>Gli access token sono JWT a vita breve (default 15 minuti) ottenuti tramite gli endpoint di autenticazione. Sono firmati con RS256 (o HS256 a seconda della configurazione) e possono essere verificati localmente usando l’endpoint JWKS.
Livello di Accesso per Tipo di Endpoint
| Tipo di Endpoint | Autenticazione Richiesta | Note |
|---|---|---|
| Endpoint auth pubblici | No | /api/auth/login, /api/auth/signup, /api/auth/magic-link, /api/oauth/authorize |
| Utente autenticato | Sì | Access token utente standard |
| Endpoint admin | Sì | Il token deve avere il permesso richiesto (es. manage:users) |
| Endpoint M2M | Sì | Token client_credentials con scope configurati |
Gli endpoint admin e di management controllano i permessi usando l’header x-tenant in combinazione con il Bearer token. I ruoli del token vengono risolti e verificati rispetto al permesso richiesto prima che la richiesta venga elaborata.
Header Tenant
Auris è una piattaforma multi-tenant. Le richieste agli endpoint admin devono includere l’identificatore del tenant:
x-tenant: <tenant-id>Il tenant ID è il nome del realm configurato nel tuo deployment Auris. Per l’installazione predefinita è default. Per configurazioni tenant personalizzate, è il nome del realm mostrato nella Console sotto Impostazioni → Generale.
Se l’header viene omesso su endpoint che lo richiedono, l’API restituisce 400 Bad Request con codice MISSING_TENANT.
Formato delle Richieste
Usa Content-Type: application/json per tutte le richieste POST, PUT e PATCH con un corpo della richiesta:
Content-Type: application/jsonEsempio di richiesta:
curl -X POST https://api.altovar.net/api/auth/login \
-H "Content-Type: application/json" \
-d '{"email": "[email protected]", "password": "segreto"}'Per il caricamento di file (importazione utenti), usa multipart/form-data.
Formato delle Risposte
Tutte le risposte API seguono un formato envelope coerente.
Risposta di Successo
{
"ok": true,
"data": { }
}Il campo data contiene il risultato. La sua forma varia per endpoint ed è documentata individualmente per ogni endpoint.
Risposta di Errore
{
"ok": false,
"error": {
"code": "CODICE_ERRORE",
"message": "Descrizione leggibile di cosa è andato storto."
}
}Codici di Stato HTTP
| Codice | Significato |
|---|---|
200 OK | Richiesta riuscita |
201 Created | Risorsa creata con successo |
400 Bad Request | Corpo della richiesta o parametri non validi |
401 Unauthorized | Access token mancante o non valido |
403 Forbidden | Il token è valido ma non ha il permesso richiesto |
404 Not Found | La risorsa non esiste |
409 Conflict | La risorsa esiste già (es. email duplicata) |
429 Too Many Requests | Rate limit superato |
500 Internal Server Error | Errore lato server |
Codici di Errore Comuni
| Codice | Descrizione |
|---|---|
INVALID_CREDENTIALS | Combinazione email/password errata |
ACCOUNT_LOCKED | Account bloccato per troppi tentativi falliti |
TOKEN_EXPIRED | L’access token è scaduto |
TOKEN_INVALID | L’access token è malformato o la firma non è valida |
PERMISSION_DENIED | L’utente non ha il permesso richiesto |
NOT_FOUND | La risorsa richiesta non esiste |
VALIDATION_ERROR | Il corpo della richiesta non ha superato la validazione dello schema |
RATE_LIMITED | Troppe richieste in una breve finestra temporale |
MISSING_TENANT | L’header x-tenant obbligatorio è mancante |
TENANT_NOT_FOUND | Il tenant specificato non esiste |
Paginazione
Gli endpoint di elenco restituiscono risultati paginati usando numeri di pagina basati su cursore.
Struttura della Risposta
{
"ok": true,
"data": {
"data": [],
"pagination": {
"page": 1,
"limit": 20,
"total": 143,
"totalPages": 8
}
}
}Parametri di Query
| Parametro | Tipo | Default | Max | Descrizione |
|---|---|---|---|---|
page | integer | 1 | — | Numero di pagina (basato su 1) |
limit | integer | 20 | 100 | Elementi per pagina |
Esempio:
GET /api/users?page=2&limit=50Rate Limiting
Ogni risposta include header di rate limiting:
| Header | Descrizione |
|---|---|
X-RateLimit-Limit | Massimo numero di richieste consentite nella finestra corrente |
X-RateLimit-Remaining | Richieste rimanenti nella finestra corrente |
X-RateLimit-Reset | Timestamp Unix quando la finestra si resetta |
Quando viene superato un rate limit, l’API restituisce 429 Too Many Requests con un header Retry-After che indica quanti secondi attendere prima di riprovare.
Livelli di Rate Limiting
| Livello | Endpoint | Limite |
|---|---|---|
| Auth | Login, signup, forgot-password | Severo (previene il brute force) |
| Sensitive | 2FA, cambio password, magic link | Moderato |
| API | Tutti gli endpoint admin/management | Standard |
| Public | Discovery OIDC, JWKS | Rilassato |
Gli endpoint auth e sensitive hanno rate limit aggiuntivi per account oltre ai limiti basati sull’IP. I fallimenti ripetuti al login attivano il blocco progressivo.
CORS
Il Cross-Origin Resource Sharing (CORS) è applicato su tutti gli endpoint API. Le origini consentite devono essere registrate nelle impostazioni dell’Applicazione nella Console Auris sotto Applicazioni → [App] → Origini Consentite.
Le richieste preflight OPTIONS vengono gestite automaticamente. Le credenziali (cookie) sono consentite quando l’origin della richiesta è registrata.
Per registrare un’origin:
- Vai su Console → Applicazioni
- Seleziona la tua applicazione
- Aggiungi l’origin nelle Origini Consentite (es.
https://app.tuodominio.com)
Discovery OIDC
Auris espone un documento di discovery OpenID Connect standard:
GET /.well-known/openid-configurationQuesto restituisce un documento JSON contenente tutti gli URL degli endpoint, i grant type supportati, gli scope, gli algoritmi di firma e altri metadati. Le librerie OIDC standard usano questo per auto-configurarsi.
Esempio di campi della risposta:
{
"issuer": "https://api.altovar.net",
"authorization_endpoint": "https://api.altovar.net/api/oauth/authorize",
"token_endpoint": "https://api.altovar.net/api/auth/token",
"userinfo_endpoint": "https://api.altovar.net/api/auth/validate",
"jwks_uri": "https://api.altovar.net/.well-known/jwks.json",
"response_types_supported": ["code"],
"grant_types_supported": ["authorization_code", "client_credentials", "urn:ietf:params:oauth:grant-type:device_code", "urn:ietf:params:oauth:grant-type:token-exchange"],
"subject_types_supported": ["public"],
"id_token_signing_alg_values_supported": ["RS256", "HS256"],
"scopes_supported": ["openid", "profile", "email"]
}JWKS
Le chiavi di firma pubbliche usate per la verifica JWT sono disponibili su:
GET /.well-known/jwks.jsonRisposta:
{
"keys": [
{
"kty": "RSA",
"use": "sig",
"kid": "key-id-1",
"alg": "RS256",
"n": "...",
"e": "AQAB"
}
]
}Le chiavi vengono memorizzate nella cache dai client per un massimo di 1 ora (Cache-Control: public, max-age=3600). La rotazione delle chiavi aggiunge una nuova chiave al set; le chiavi vecchie rimangono presenti finché i token emessi non scadono.
L’SDK JS Auris (@auris/js) include un verificatore JWT basato su JWKS integrato che recupera e memorizza nella cache automaticamente le chiavi di firma. Consulta la documentazione dell’SDK per l’utilizzo.
SDK Client
Invece di chiamare direttamente l’API, considera di usare un SDK Auris che gestisce automaticamente la gestione dei token, PKCE, refresh e la gestione degli errori:
| SDK | Pacchetto | Linguaggio |
|---|---|---|
| JavaScript | @auris/js | Browser + Node.js |
| React | @auris/react | React 18+ |
| Next.js | @auris/nextjs | Next.js 13+ App Router |
| PHP | auris/sdk | PHP 7.4+ |
| WordPress | auris-sso | Plugin WordPress |
Consulta la documentazione degli SDK per le guide all’installazione e all’utilizzo.