Skip to Content

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ì:

  1. Un admin crea una connessione SSO per un’organizzazione, fornendo la configurazione IdP (metadati SAML o URL discovery OIDC).
  2. L’admin aggiunge e verifica uno o più domini email (es. acme-corp.com) tramite record DNS TXT.
  3. Una volta attivata la connessione, gli utenti con un’email di dominio verificato vengono automaticamente reindirizzati all’IdP al login.
  4. 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

GET/api/organizations/[orgId]/sso/connectionsRequires: view:sso_connections

Elenca 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:

StatoDescrizione
PENDINGConnessione creata ma non ancora attivata
ACTIVEConnessione attiva — gli utenti con email di dominio verificato vengono reindirizzati
DISABLEDConnessione disattivata da un admin
ERRORLa connessione ha riscontrato un errore di configurazione durante la comunicazione IdP
POST/api/organizations/[orgId]/sso/connectionsRequires: manage:sso_connections

Crea 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-----" } }
CampoObbligatorioDescrizione
metadataUrlNoURL ai metadati SAML XML dell’IdP. Se fornito, entityId, ssoUrl e certificate vengono estratti automaticamente.
entityIdSì*L’Entity ID dell’IdP (Issuer). Obbligatorio se metadataUrl non è fornito.
ssoUrlSì*L’URL del Single Sign-On Service dell’IdP (binding HTTP-Redirect).
certificateSì*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" } }
CampoObbligatorioDescrizione
discoveryUrlSìL’URL OIDC Discovery dell’IdP.
clientIdSìIl Client ID registrato presso l’IdP per Auris come relying party.
clientSecretSì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

CodiceHTTPDescrizione
VALIDATION_ERROR400Campi obbligatori mancanti o configurazione non valida
METADATA_FETCH_FAILED400Impossibile recuperare o analizzare l’URL dei metadati SAML
DISCOVERY_FETCH_FAILED400Impossibile recuperare o analizzare il documento di discovery OIDC
SSO_CONNECTION_EXISTS409Esiste già una connessione SSO di questo tipo per l’organizzazione
DELETE/api/organizations/[orgId]/sso/connections/[id]Requires: manage:sso_connections

Elimina 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

POST/api/organizations/[orgId]/sso/connections/[id]/activateRequires: manage:sso_connections

Attiva 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

CodiceHTTPDescrizione
NO_VERIFIED_DOMAINS400Impossibile attivare SSO senza almeno un dominio verificato
CONNECTION_NOT_FOUND404La connessione SSO non esiste
POST/api/organizations/[orgId]/sso/connections/[id]/deactivateRequires: manage:sso_connections

Disattiva 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.

GET/api/organizations/[orgId]/sso/domainsRequires: view:sso_connections

Elenca 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:

StatoDescrizione
PENDINGDominio aggiunto, record DNS non ancora verificato
VERIFYINGVerifica in corso
ACTIVEDominio verificato — il reindirizzamento automatico SSO è attivo per questo dominio
FAILEDLa verifica è stata eseguita ma il record DNS atteso non è stato trovato
POST/api/organizations/[orgId]/sso/domainsRequires: manage:sso_connections

Aggiunge 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

CodiceHTTPDescrizione
DOMAIN_TAKEN409Questo dominio è già registrato per un’altra organizzazione
VALIDATION_ERROR400Formato dominio non valido
DOMAIN_EXISTS409Questo dominio è già associato a questa organizzazione
POST/api/organizations/[orgId]/sso/domains/[id]/checkRequires: manage:sso_connections

Avvia 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.

POST/api/auth/sso/detect

Rileva 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.

GET/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:

  1. Il client rileva l’SSO tramite POST /api/auth/sso/detect
  2. Il client reindirizza il browser al loginUrl dalla risposta di rilevamento
  3. Auris reindirizza alla pagina di login dell’IdP
  4. L’utente si autentica presso l’IdP
  5. L’IdP reindirizza al callback di Auris
  6. 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:

  1. Crea un nuovo account utente usando gli attributi dell’assertion SSO (email, nome, cognome)
  2. Collega l’utente all’organizzazione proprietaria della connessione SSO
  3. Assegna il ruolo membro predefinito (MEMBER)
  4. 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
ErroreDescrizione
sso_failedL’assertion SSO non può essere validata
sso_connection_disabledLa connessione SSO è stata disattivata
sso_connection_not_foundL’alias IdP non corrisponde a nessuna connessione SSO configurata
email_mismatchL’email dall’assertion SSO non corrisponde a un dominio verificato

Riferimento Permessi

PermessoDescrizione
view:sso_connectionsVisualizza connessioni SSO e stato di verifica dominio
manage:sso_connectionsCrea, 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