API Sicurezza
L’API Sicurezza fornisce strumenti per proteggere il tenant da accessi non autorizzati e attività malevole. Gli amministratori possono gestire liste di IP consentiti/bloccati, esaminare eventi di login sospetti, configurare la verifica CAPTCHA e gestire i blocchi degli account.
Auris valuta le regole di sicurezza durante ogni tentativo di autenticazione in questo ordine: regole IP (blocco/permesso) → verifica CAPTCHA → rate limiting → validazione credenziali → analisi login sospetti → MFA adattivo. Ogni livello opera indipendentemente e può essere configurato separatamente.
Regole IP
Le regole IP definiscono liste di permesso e blocco usando la notazione CIDR. Le regole di blocco hanno sempre precedenza sulle regole di permesso. Le regole possono essere limitate all’intero tenant o a un’applicazione specifica.
Elenca Regole IP
/api/ip-rulesRequires: manage:usersElenca tutte le regole IP allow/block configurate per il tenant. Supporta filtraggio per tipo di regola, scope e stato attivo. Le regole sono ordinate per data di creazione decrescente.
Parametri di query
| Parametro | Tipo | Descrizione |
|---|---|---|
type | string | Filtra per tipo di regola: ALLOW o BLOCK |
scope | string | Filtra per scope: TENANT o APPLICATION |
isActive | boolean | Filtra per stato attivo |
page | integer | Numero di pagina (default: 1) |
limit | integer | Elementi per pagina (default: 20, max: 100) |
Risposta di successo
{
"ok": true,
"data": {
"data": [
{
"id": "ipr_abc123",
"cidr": "203.0.113.0/24",
"type": "BLOCK",
"scope": "TENANT",
"applicationId": null,
"label": "Known bad actor range",
"note": "Blocked after brute-force campaign on 2025-02-10",
"isTemporary": true,
"expiresAt": "2025-03-10T00:00:00Z",
"isActive": true,
"createdAt": "2025-02-10T14:30:00Z",
"updatedAt": "2025-02-10T14:30:00Z"
},
{
"id": "ipr_def456",
"cidr": "10.0.0.0/8",
"type": "ALLOW",
"scope": "TENANT",
"applicationId": null,
"label": "Corporate VPN",
"note": "Internal network range",
"isTemporary": false,
"expiresAt": null,
"isActive": true,
"createdAt": "2025-01-15T09:00:00Z",
"updatedAt": "2025-01-15T09:00:00Z"
}
],
"pagination": { "page": 1, "limit": 20, "total": 3, "totalPages": 1 }
}
}Crea Regola IP
/api/ip-rulesRequires: manage:usersCrea una nuova regola IP allow o block. La notazione CIDR è obbligatoria — usa /32 per
un singolo indirizzo IP. Le regole di blocco hanno sempre precedenza sulle regole di
permesso durante la valutazione.
Corpo della richiesta
{
"cidr": "192.0.2.0/24",
"type": "BLOCK",
"scope": "TENANT",
"label": "Datacenter range",
"note": "Blocked due to automated scraping activity",
"isTemporary": true,
"expiresAt": "2025-04-01T00:00:00Z"
}| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
cidr | string | Sì | Indirizzo IP o intervallo in notazione CIDR (es. 10.0.0.1/32, 192.168.0.0/16) |
type | string | Sì | ALLOW o BLOCK |
scope | string | Sì | TENANT (si applica a tutte le app) o APPLICATION (richiede applicationId) |
applicationId | string | No | Obbligatorio quando scope è APPLICATION |
label | string | No | Etichetta leggibile per la regola |
note | string | No | Nota amministrativa o motivo |
isTemporary | boolean | No | Se la regola scade automaticamente (default: false) |
expiresAt | string | No | Data di scadenza ISO 8601. Obbligatorio quando isTemporary è true |
Codici di errore
| Codice | HTTP | Descrizione |
|---|---|---|
VALIDATION_ERROR | 400 | Notazione CIDR non valida, campi obbligatori mancanti, o combinazione scope/tipo non valida |
DUPLICATE_RULE | 409 | Esiste già una regola con lo stesso CIDR e scope |
Le regole temporanee vengono automaticamente rimosse dopo il timestamp expiresAt. Non è necessario eliminarle manualmente.
Aggiorna Regola IP
/api/ip-rules/[id]Requires: manage:usersAggiorna una regola IP esistente. Tutti i campi sono opzionali — solo i campi forniti vengono aggiornati. La modifica del CIDR o del tipo di una regola ha effetto immediato.
Elimina Regola IP
/api/ip-rules/[id]Requires: manage:usersElimina definitivamente una regola IP. La regola viene rimossa immediatamente.
Codici di errore
| Codice | HTTP | Descrizione |
|---|---|---|
NOT_FOUND | 404 | La regola IP non esiste |
Eventi di Login Sospetti
Auris monitora i tentativi di login per comportamenti anomali usando cinque metodi di rilevamento: nuovo dispositivo, nuovo indirizzo IP, nuovo paese, viaggio impossibile e utilizzo VPN/proxy. Quando viene rilevata un’attività sospetta, viene registrato un evento e viene eseguita l’azione configurata (solo log, richiesta MFA, o blocco).
Elenca Eventi di Login Sospetti
/api/suspicious-login/eventsRequires: manage:usersElenca gli eventi di login sospetti nel tenant. Gli eventi sono ordinati per data di creazione
decrescente. Usa il filtro reviewed per trovare eventi che richiedono attenzione.
Parametri di query
| Parametro | Tipo | Descrizione |
|---|---|---|
userId | string | Filtra eventi per un utente specifico |
severity | string | Filtra per gravità: low, medium, high, critical |
reason | string | Filtra per motivo: new_device, new_ip, new_country, impossible_travel, vpn_detected |
reviewed | boolean | true per eventi revisionati, false per non revisionati |
page | integer | Numero di pagina (default: 1) |
limit | integer | Elementi per pagina (default: 20, max: 100) |
Risposta di successo
{
"ok": true,
"data": {
"data": [
{
"id": "sle_abc123",
"userId": "usr_xyz789",
"userEmail": "[email protected]",
"reason": "impossible_travel",
"severity": "high",
"actionTaken": "require_mfa",
"details": {
"previousLocation": { "country": "Italy", "city": "Rome" },
"currentLocation": { "country": "Brazil", "city": "Sao Paulo" },
"distanceKm": 9187,
"timeDiffMinutes": 45,
"requiredSpeedKmh": 12249
},
"ipAddress": "198.51.100.42",
"reviewed": false,
"createdAt": "2025-02-18T09:15:00Z"
}
],
"pagination": { "page": 1, "limit": 20, "total": 47, "totalPages": 3 }
}
}Segna Evento come Revisionato
/api/suspicious-login/events/[id]/reviewRequires: manage:usersSegna un evento di login sospetto come revisionato. Questo è un riconoscimento amministrativo e non influisce sull’accesso dell’utente.
Codici di errore
| Codice | HTTP | Descrizione |
|---|---|---|
NOT_FOUND | 404 | L’evento non esiste |
ALREADY_REVIEWED | 400 | L’evento è già stato segnato come revisionato |
Recupera Configurazione Rilevamento
/api/suspicious-login/configRequires: manage:usersRecupera la configurazione attuale di rilevamento dei login sospetti per il tenant.
Risposta di successo
{
"ok": true,
"data": {
"detectNewDevice": true,
"detectNewIp": true,
"detectNewCountry": true,
"detectImpossibleTravel": true,
"detectVpn": false,
"actionOnNewDevice": "log",
"actionOnNewIp": "log",
"actionOnNewCountry": "require_mfa",
"actionOnImpossibleTravel": "require_mfa",
"actionOnVpn": "log",
"maxTravelSpeedKmh": 900,
"geoIpProvider": "ip-api",
"updatedAt": "2025-02-01T12:00:00Z"
}
}| Campo | Tipo | Descrizione |
|---|---|---|
detectNewDevice | boolean | Segnala i login da dispositivi mai visti prima |
detectNewIp | boolean | Segnala i login da indirizzi IP mai visti prima |
detectNewCountry | boolean | Segnala i login da un nuovo paese |
detectImpossibleTravel | boolean | Segnala quando i login consecutivi sono geograficamente impossibili dato il tempo trascorso |
detectVpn | boolean | Segnala i login da IP VPN/proxy/datacenter noti |
actionOn* | string | Azione da intraprendere: log (solo registra), require_mfa (forza 2FA), block (nega accesso) |
maxTravelSpeedKmh | integer | Soglia di velocità per il rilevamento del viaggio impossibile (default: 900 km/h) |
Aggiorna Configurazione Rilevamento
/api/suspicious-login/configRequires: manage:usersAggiorna la configurazione di rilevamento dei login sospetti. Tutti i campi sono opzionali. Le modifiche hanno effetto immediato sui successivi tentativi di login.
Impostare actionOnImpossibleTravel o actionOnNewCountry su block può bloccare utenti legittimi che viaggiano frequentemente o usano reti mobili. Considera di usare require_mfa invece, che aggiunge un passaggio di verifica senza negare completamente l’accesso.
CAPTCHA
La verifica CAPTCHA aggiunge una sfida umana ai flussi di autenticazione. Auris supporta tre provider: Cloudflare Turnstile, hCaptcha e reCAPTCHA v3. Il CAPTCHA può essere attivato ad ogni tentativo, solo dopo attività sospetta, o dopo un numero configurabile di tentativi di login falliti.
Recupera Configurazione CAPTCHA
/api/captcha/configRequires: manage:usersRecupera la configurazione CAPTCHA attuale per il tenant.
Risposta di successo
{
"ok": true,
"data": {
"provider": "CLOUDFLARE_TURNSTILE",
"trigger": "ON_SUSPICIOUS",
"siteKey": "0x4AAAAAAA...",
"scoreThreshold": 0.5,
"enableOnLogin": true,
"enableOnRegister": true,
"enableOnReset": false,
"updatedAt": "2025-02-15T10:00:00Z"
}
}La secretKey non viene mai restituita nelle risposte API. Può essere impostata solo tramite l’endpoint di aggiornamento.
Aggiorna Configurazione CAPTCHA
/api/captcha/configRequires: manage:usersAggiorna la configurazione CAPTCHA. Tutti i campi sono opzionali. Imposta provider su null
per disabilitare completamente il CAPTCHA.
Corpo della richiesta
{
"provider": "CLOUDFLARE_TURNSTILE",
"trigger": "AFTER_FAILURES",
"siteKey": "0x4AAAAAAA_your_site_key",
"secretKey": "0x4AAAAAAA_your_secret_key",
"scoreThreshold": 0.5,
"enableOnLogin": true,
"enableOnRegister": true,
"enableOnReset": true
}| Campo | Tipo | Descrizione |
|---|---|---|
provider | string | CLOUDFLARE_TURNSTILE, HCAPTCHA, RECAPTCHA_V3, o null per disabilitare |
trigger | string | ALWAYS, ON_SUSPICIOUS, AFTER_FAILURES |
siteKey | string | Chiave sito pubblica del provider CAPTCHA |
secretKey | string | Chiave segreta del provider CAPTCHA (solo scrittura, mai restituita) |
scoreThreshold | number | Soglia punteggio per reCAPTCHA v3 (0.0 - 1.0, default: 0.5) |
enableOnLogin | boolean | Abilita CAPTCHA nella pagina di login |
enableOnRegister | boolean | Abilita CAPTCHA nella pagina di registrazione |
enableOnReset | boolean | Abilita CAPTCHA nella pagina di reset password |
Codici di errore
| Codice | HTTP | Descrizione |
|---|---|---|
VALIDATION_ERROR | 400 | Provider non valido, siteKey/secretKey mancanti quando il provider è impostato, o scoreThreshold fuori intervallo |
Blocchi Account
Quando un utente supera il lockoutThreshold configurato nelle impostazioni di sicurezza, il suo account viene temporaneamente bloccato. Gli amministratori possono visualizzare gli account bloccati e sbloccarli manualmente.
Elenca Account Bloccati
/api/admin/lockoutsRequires: manage:usersElenca tutti gli account utente attualmente bloccati. Vengono restituiti solo gli account con blocchi attivi. I blocchi scaduti naturalmente non sono inclusi.
Risposta di successo
{
"ok": true,
"data": {
"data": [
{
"id": "lock_abc123",
"userId": "usr_xyz789",
"userEmail": "[email protected]",
"userName": "Alice Smith",
"failedAttempts": 5,
"lockedAt": "2025-02-18T09:00:00Z",
"expiresAt": "2025-02-18T09:15:00Z",
"ipAddress": "203.0.113.50"
}
],
"pagination": { "page": 1, "limit": 20, "total": 2, "totalPages": 1 }
}
}Sblocca Account
/api/admin/lockouts/[userId]Requires: manage:usersSblocca immediatamente un account utente. Il contatore dei tentativi falliti viene azzerato. L’utente può tentare di accedere nuovamente immediatamente dopo lo sblocco.
Risposta di successo
{
"ok": true,
"data": {
"unlocked": true,
"userId": "usr_xyz789"
}
}Codici di errore
| Codice | HTTP | Descrizione |
|---|---|---|
NOT_FOUND | 404 | L’utente non è attualmente bloccato |
I blocchi account scadono automaticamente in base alla lockoutDuration configurata nelle impostazioni di sicurezza. Lo sblocco manuale è necessario solo quando un utente legittimo è bloccato e non può aspettare la scadenza del blocco.
Ordine di Valutazione della Sicurezza
Durante ogni tentativo di autenticazione, Auris valuta i livelli di sicurezza in questo ordine:
- Regole IP — Se l’IP del client corrisponde a una regola BLOCK, la richiesta viene negata con
403 IP_BLOCKED. - CAPTCHA — Se il CAPTCHA è configurato e la condizione di trigger è soddisfatta, il client deve fornire un token CAPTCHA valido.
- Rate Limiting — Vengono controllati i limiti di frequenza a finestra scorrevole (configurabili per tier).
- Validazione Credenziali — Verifica nome utente/password o altre credenziali tramite Keycloak.
- Brute Force / Blocco — Il contatore dei tentativi falliti viene incrementato. Se la soglia viene raggiunta, l’account viene bloccato.
- Analisi Login Sospetti — Analisi post-autenticazione di dispositivo, IP, geografia e pattern di viaggio.
- MFA Adattivo — La valutazione del rischio può richiedere un’autenticazione step-up se il punteggio di rischio supera le soglie.
Ogni livello è indipendente e può essere disabilitato senza influenzare gli altri.
Riferimento Permessi
| Permesso | Descrizione |
|---|---|
manage:users | Gestisce regole IP, revisiona eventi di login sospetti, configura CAPTCHA e sblocca account |
Correlati
- MFA Adattivo e Risk Scoring — Come la valutazione del rischio guida le decisioni di sicurezza
- Protezione dagli Attacchi — Configura protezione brute-force e login sospetti
- Configurazione Protezione Minacce — Regole IP, CAPTCHA e rilevamento bot
- Impostazioni di Sicurezza — Gestisci tutte le funzionalità di sicurezza dalla Console