API Enterprise SSO
L’Enterprise SSO (Single Sign-On) consente ai membri dell’organizzazione di autenticarsi usando l’identity provider aziendale esistente anziché un nome utente e una password. Auris supporta sia il protocollo SAML 2.0 che OIDC, basati sul brokering IdP di Keycloak.
Il flusso SSO funziona così:
- Un admin crea una connessione SSO per un’organizzazione, fornendo la configurazione IdP (metadati SAML o URL discovery OIDC).
- L’admin aggiunge e verifica uno o più domini email (es.
acme-corp.com) tramite record DNS TXT. - Una volta attivata la connessione, gli utenti con un’email di dominio verificato vengono automaticamente reindirizzati all’IdP al login.
- Al primo login SSO, Auris esegue il provisioning JIT (Just-In-Time) — crea l’account utente, lo collega all’organizzazione e emette i token Auris, tutto in modo trasparente.
Tutti gli endpoint SSO admin richiedono l’intestazione x-tenant e un token Bearer valido.
Connessioni SSO
/api/organizations/[orgId]/sso/connectionsRequires: view:sso_connectionsElenca tutte le connessioni SSO configurate per un’organizzazione. Restituisce metadati della connessione, tipo, stato e domini verificati associati.
Risposta di successo
{
"ok": true,
"data": [
{
"id": "sso_abc123",
"type": "saml",
"name": "Acme Corporate IdP",
"status": "ACTIVE",
"keycloakIdpAlias": "acme-saml-abc123",
"domains": ["acme-corp.com", "acme.io"],
"createdAt": "2025-01-20T09:00:00Z",
"updatedAt": "2025-02-01T14:30:00Z"
}
]
}Stati della connessione SSO:
| Stato | Descrizione |
|---|---|
PENDING | Connessione creata ma non ancora attivata |
ACTIVE | Connessione attiva — gli utenti con email di dominio verificato vengono reindirizzati |
DISABLED | Connessione disattivata da un admin |
ERROR | La connessione ha riscontrato un errore di configurazione durante la comunicazione IdP |
/api/organizations/[orgId]/sso/connectionsRequires: manage:sso_connectionsCrea una nuova connessione SSO per l’organizzazione. Auris registra un corrispondente Identity Provider in Keycloak e restituisce i metadati del Service Provider necessari per configurare l’IdP lato cliente.
Configurazione SAML 2.0
Per SSO basato su SAML, fornisci i metadati dell’Identity Provider. Puoi fornire un metadataUrl (consigliato — Auris lo recupera e analizza automaticamente) o fornire i campi individuali manualmente.
Corpo della richiesta — SAML con URL metadati
{
"type": "saml",
"name": "Acme Corporate SAML",
"config": {
"metadataUrl": "https://idp.acme-corp.com/federationmetadata/2007-06/federationmetadata.xml"
}
}Corpo della richiesta — SAML con configurazione manuale
{
"type": "saml",
"name": "Acme Corporate SAML",
"config": {
"entityId": "https://idp.acme-corp.com",
"ssoUrl": "https://idp.acme-corp.com/saml2/sso",
"certificate": "-----BEGIN CERTIFICATE-----\nMIIDpDCCAoygAwIBAgIGAX...\n-----END CERTIFICATE-----"
}
}| Campo | Obbligatorio | Descrizione |
|---|---|---|
metadataUrl | No | URL ai metadati SAML XML dell’IdP. Se fornito, entityId, ssoUrl e certificate vengono estratti automaticamente. |
entityId | Sì* | L’Entity ID dell’IdP (Issuer). Obbligatorio se metadataUrl non è fornito. |
ssoUrl | Sì* | L’URL del Single Sign-On Service dell’IdP (binding HTTP-Redirect). |
certificate | Sì* | Il certificato X.509 di firma dell’IdP in formato PEM. |
Configurazione OIDC
Corpo della richiesta — OIDC
{
"type": "oidc",
"name": "Acme OIDC Provider",
"config": {
"discoveryUrl": "https://login.acme-corp.com/.well-known/openid-configuration",
"clientId": "auris-sp-client-id",
"clientSecret": "auris-sp-client-secret"
}
}| Campo | Obbligatorio | Descrizione |
|---|---|---|
discoveryUrl | Sì | L’URL OIDC Discovery dell’IdP. |
clientId | Sì | Il Client ID registrato presso l’IdP per Auris come relying party. |
clientSecret | Sì | Il Client Secret per la registrazione relying party. |
Risposta di successo
{
"ok": true,
"data": {
"id": "sso_def456",
"type": "saml",
"name": "Acme Corporate SAML",
"status": "PENDING",
"keycloakIdpAlias": "acme-saml-def456",
"acsUrl": "https://api.altovar.net/api/auth/sso/callback",
"entityId": "https://api.altovar.net",
"createdAt": "2025-02-18T10:00:00Z"
}
}I valori acsUrl (Assertion Consumer Service URL) e entityId nella risposta sono i valori del Service Provider che devono essere configurati nell’Identity Provider del cliente. Per SAML, imposta l’ACS URL come reply URL e l’entity ID di Auris come audience. Per OIDC, registra l’acsUrl come redirect URI presso l’IdP.
Codici di errore
| Codice | HTTP | Descrizione |
|---|---|---|
VALIDATION_ERROR | 400 | Campi obbligatori mancanti o configurazione non valida |
METADATA_FETCH_FAILED | 400 | Impossibile recuperare o analizzare l’URL dei metadati SAML |
DISCOVERY_FETCH_FAILED | 400 | Impossibile recuperare o analizzare il documento di discovery OIDC |
SSO_CONNECTION_EXISTS | 409 | Esiste già una connessione SSO di questo tipo per l’organizzazione |
/api/organizations/[orgId]/sso/connections/[id]Requires: manage:sso_connectionsElimina una connessione SSO. L’Identity Provider Keycloak corrispondente viene rimosso. Gli utenti che si autenticavano tramite questa connessione torneranno al login basato su password. I loro account e dati vengono conservati.
L’eliminazione di una connessione SSO attiva influisce immediatamente su tutti gli utenti che si autenticano tramite essa. Dovranno reimpostare la propria password (tramite il flusso password dimenticata) se non ne hanno mai impostata una, poiché gli utenti SSO vengono provisioned via JIT senza password.
Attiva e Disattiva
/api/organizations/[orgId]/sso/connections/[id]/activateRequires: manage:sso_connectionsAttiva una connessione SSO PENDING o DISABLED. Dopo l’attivazione, gli utenti che accedono con un’email di dominio verificato vengono automaticamente reindirizzati all’Identity Provider. L’attivazione richiede almeno un dominio verificato associato all’organizzazione.
Codici di errore
| Codice | HTTP | Descrizione |
|---|---|---|
NO_VERIFIED_DOMAINS | 400 | Impossibile attivare SSO senza almeno un dominio verificato |
CONNECTION_NOT_FOUND | 404 | La connessione SSO non esiste |
/api/organizations/[orgId]/sso/connections/[id]/deactivateRequires: manage:sso_connectionsDisattiva una connessione SSO attiva. Gli utenti con email di dominio torneranno all’autenticazione standard con password. La configurazione della connessione viene conservata e può essere riattivata in seguito.
Verifica Dominio
La verifica del dominio prova che controlli un dominio email prima di abilitare il reindirizzamento automatico SSO per quel dominio. La verifica avviene tramite un record DNS (TXT o CNAME). Una volta verificato un dominio, qualsiasi utente che accede con un indirizzo email su quel dominio viene automaticamente reindirizzato al provider SSO dell’organizzazione.
/api/organizations/[orgId]/sso/domainsRequires: view:sso_connectionsElenca tutti i domini associati alla configurazione SSO di un’organizzazione, incluso lo stato di verifica, il metodo e il token.
Risposta di successo
{
"ok": true,
"data": [
{
"id": "dom_abc123",
"domain": "acme-corp.com",
"status": "ACTIVE",
"verificationMethod": "TXT",
"verificationToken": "auris-verify-abc123def456",
"verifiedAt": "2025-01-22T14:00:00Z",
"createdAt": "2025-01-20T10:00:00Z"
}
]
}Stati di verifica del dominio:
| Stato | Descrizione |
|---|---|
PENDING | Dominio aggiunto, record DNS non ancora verificato |
VERIFYING | Verifica in corso |
ACTIVE | Dominio verificato — il reindirizzamento automatico SSO è attivo per questo dominio |
FAILED | La verifica è stata eseguita ma il record DNS atteso non è stato trovato |
/api/organizations/[orgId]/sso/domainsRequires: manage:sso_connectionsAggiunge un dominio all’organizzazione e avvia la verifica. Auris genera un token di verifica univoco da aggiungere come record DNS. La risposta include il record DNS da creare.
Corpo della richiesta
{
"domain": "acme-corp.com"
}Risposta di successo
{
"ok": true,
"data": {
"id": "dom_ghi789",
"domain": "acme-corp.com",
"status": "PENDING",
"verificationMethod": "TXT",
"verificationToken": "auris-verify-mno345pqr678",
"dnsRecord": {
"type": "TXT",
"host": "_auris-verify.acme-corp.com",
"value": "auris-verify-mno345pqr678"
}
}
}Codici di errore
| Codice | HTTP | Descrizione |
|---|---|---|
DOMAIN_TAKEN | 409 | Questo dominio è già registrato per un’altra organizzazione |
VALIDATION_ERROR | 400 | Formato dominio non valido |
DOMAIN_EXISTS | 409 | Questo dominio è già associato a questa organizzazione |
/api/organizations/[orgId]/sso/domains/[id]/checkRequires: manage:sso_connectionsAvvia una ricerca DNS in tempo reale per verificare il dominio. Auris esegue una query DNS TXT (o CNAME) e controlla il token di verifica. Restituisce immediatamente lo stato aggiornato.
La propagazione DNS di solito avviene in pochi minuti ma in casi rari può richiedere fino a 48 ore. Puoi chiamare l’endpoint di verifica ripetutamente fino a quando lo stato non passa ad ACTIVE.
Endpoint SSO Pubblici
Questi endpoint vengono usati dalla pagina di login ospitata di Auris e dall’SDK per eseguire il flusso SSO. Non richiedono autenticazione.
/api/auth/sso/detectRileva se il dominio email di un utente ha una connessione Enterprise SSO attiva. Usalo per costruire form di login “intelligenti” che reindirizzano automaticamente gli utenti enterprise al loro provider SSO invece di mostrare il campo password.
Corpo della richiesta
{
"email": "[email protected]"
}Risposta — SSO disponibile
{
"ok": true,
"data": {
"ssoAvailable": true,
"provider": "saml",
"loginUrl": "https://api.altovar.net/api/auth/sso/login/acme-saml-abc123"
}
}Risposta — nessun SSO
{
"ok": true,
"data": {
"ssoAvailable": false,
"provider": null,
"loginUrl": null
}
}La risposta è sempre 200 OK indipendentemente dalla configurazione SSO del dominio, per prevenire la divulgazione di informazioni su quali organizzazioni usano SSO.
/api/auth/sso/login/[alias]Avvia il flusso di login SSO. Reindirizza il browser alla pagina di login dell’Identity
Provider configurato. L’alias è l’alias IdP Keycloak restituito quando si crea la
connessione SSO (campo keycloakIdpAlias).
Questo endpoint è un redirect del browser, non una chiamata API. Il flusso tipico:
- Il client rileva l’SSO tramite
POST /api/auth/sso/detect - Il client reindirizza il browser al
loginUrldalla risposta di rilevamento - Auris reindirizza alla pagina di login dell’IdP
- L’utente si autentica presso l’IdP
- L’IdP reindirizza al callback di Auris
- Auris emette i token e reindirizza all’URL callback dell’applicazione
Provisioning JIT (Just-In-Time)
Quando un utente si autentica via SSO per la prima volta e non ha ancora un account Auris, Auris automaticamente:
- Crea un nuovo account utente usando gli attributi dell’assertion SSO (email, nome, cognome)
- Collega l’utente all’organizzazione proprietaria della connessione SSO
- Assegna il ruolo membro predefinito (
MEMBER) - Emette token di accesso e refresh standard di Auris
Ai login successivi, il record utente esistente viene abbinato per email e i token vengono emessi direttamente.
Gestione degli Errori
Se l’assertion SSO non è valida, l’utente viene reindirizzato al callback con parametri di errore:
https://app.tuodominio.com/callback?error=sso_failed&error_description=SAML+assertion+validation+failed&state=original_state| Errore | Descrizione |
|---|---|
sso_failed | L’assertion SSO non può essere validata |
sso_connection_disabled | La connessione SSO è stata disattivata |
sso_connection_not_found | L’alias IdP non corrisponde a nessuna connessione SSO configurata |
email_mismatch | L’email dall’assertion SSO non corrisponde a un dominio verificato |
Riferimento Permessi
| Permesso | Descrizione |
|---|---|
view:sso_connections | Visualizza connessioni SSO e stato di verifica dominio |
manage:sso_connections | Crea, aggiorna, elimina, attiva e disattiva connessioni SSO; gestisce la verifica dei domini |
Note Implementative
Brokering IdP Keycloak: Auris crea e gestisce configurazioni di Identity Provider Keycloak. Ogni connessione SSO corrisponde a un IdP Keycloak con un alias univoco.
Rotazione Certificati: Per le connessioni SAML, aggiorna il campo certificate nella configurazione della connessione quando l’IdP ruota il suo certificato di firma. Auris non rileva automaticamente i cambi di certificato.
Caching Discovery OIDC: Quando si usa OIDC, Auris memorizza nella cache il documento di discovery. La cache scade dopo circa 1 ora.
Correlati
- Guida Enterprise SSO — Configurazione connessioni SAML 2.0 e OIDC
- Single Sign-On — Procedura di integrazione SSO
- Enterprise SSO — Configura le connessioni SSO dalla Console
- API Organizzazioni — Endpoint delle organizzazioni a cui appartengono le connessioni SSO