Skip to Content

Enterprise SSO API

Enterprise SSO (Single Sign-On) ermöglicht es Organisationsmitgliedern, sich mit dem bestehenden Identity Provider ihres Unternehmens zu authentifizieren, anstatt einen Benutzernamen und ein Passwort zu verwenden. Auris unterstützt sowohl SAML 2.0 als auch OIDC-Protokolle, unterstützt durch Keycloak IdP-Brokering im Hintergrund.

Der SSO-Flow funktioniert wie folgt:

  1. Ein Administrator erstellt eine SSO-Verbindung für eine Organisation und gibt die IdP-Konfiguration an (SAML-Metadaten oder OIDC-Discovery-URL).
  2. Der Administrator fügt eine oder mehrere E-Mail-Domains (z. B. acme-corp.com) hinzu und verifiziert sie über DNS-TXT-Einträge.
  3. Sobald die Verbindung aktiviert ist, werden Benutzer mit einer E-Mail-Adresse einer verifizierten Domain beim Login automatisch zum IdP weitergeleitet.
  4. Beim ersten SSO-Login führt Auris Just-In-Time (JIT)-Provisionierung durch — Erstellen des Benutzerkontos, Verknüpfen mit der Organisation und Ausstellen von Auris-Tokens — alles transparent.

Alle Admin-SSO-Endpunkte erfordern den x-tenant-Header und ein gültiges Bearer-Token.

SSO-Verbindungen

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

Listet alle für eine Organisation konfigurierten SSO-Verbindungen auf. Gibt Verbindungsmetadaten, Typ, Status und zugehörige verifizierte Domains zurück.

Abfrageparameter

ParameterTypBeschreibung
pageintegerSeitennummer (Standard: 1)
limitintegerElemente pro Seite (Standard: 20)

Erfolgsantwort

{ "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" } ] }

SSO-Verbindungsstatusarten:

StatusBeschreibung
PENDINGVerbindung erstellt, aber noch nicht aktiviert
ACTIVEVerbindung ist live — Benutzer mit verifizierten Domain-E-Mails werden weitergeleitet
DISABLEDVerbindung wurde von einem Administrator deaktiviert
ERRORVerbindung hat einen Konfigurationsfehler bei der IdP-Kommunikation festgestellt
POST/api/organizations/[orgId]/sso/connectionsRequires: manage:sso_connections

Erstellt eine neue SSO-Verbindung für die Organisation. Auris registriert einen entsprechenden Identity Provider in Keycloak und gibt die Service-Provider-Metadaten zurück, die zur Konfiguration des IdP auf Kundenseite benötigt werden.

SAML 2.0-Konfiguration

Gib für SAML-basiertes SSO die Metadaten des Identity Providers an. Du kannst entweder eine metadataUrl (empfohlen — Auris ruft sie automatisch ab und parst sie) oder die einzelnen Felder manuell angeben.

Anfrage-Body — SAML mit Metadaten-URL

{ "type": "saml", "name": "Acme Corporate SAML", "config": { "metadataUrl": "https://idp.acme-corp.com/federationmetadata/2007-06/federationmetadata.xml" } }

Anfrage-Body — SAML mit manueller Konfiguration

{ "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-----" } }
FeldErforderlichBeschreibung
metadataUrlNeinURL zur SAML-Metadaten-XML des IdP. Falls angegeben, werden entityId, ssoUrl und certificate automatisch extrahiert.
entityIdJa*Die Entity ID (Issuer) des IdP. Erforderlich, wenn metadataUrl nicht angegeben wird.
ssoUrlJa*Die Single-Sign-On-Service-URL des IdP (HTTP-Redirect-Bindung). Erforderlich, wenn metadataUrl nicht angegeben wird.
certificateJa*Das X.509-Signaturzertifikat des IdP im PEM-Format. Erforderlich, wenn metadataUrl nicht angegeben wird.

OIDC-Konfiguration

Gib für OIDC-basiertes SSO die Discovery-URL und die vom IdP ausgestellten Client-Anmeldedaten an.

Anfrage-Body — 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" } }
FeldErforderlichBeschreibung
discoveryUrlJaDie OIDC-Discovery-URL des IdP. Auris ruft daraus authorization_endpoint, token_endpoint und jwks_uri ab.
clientIdJaDie beim IdP registrierte Client-ID für Auris als Relying Party.
clientSecretJaDas Client-Secret für die Relying-Party-Registrierung.

Erfolgsantwort

{ "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" } }

Die acsUrl (Assertion Consumer Service URL) und entityId in der Antwort sind die Service-Provider-Werte, die im Identity Provider des Kunden konfiguriert werden müssen. Setze für SAML die ACS-URL als Reply-URL und die Entity-ID von Auris als Audience. Registriere für OIDC die acsUrl als Weiterleitungs-URI beim IdP.

Fehlercodes

CodeHTTPBeschreibung
VALIDATION_ERROR400Fehlende Pflichtfelder oder ungültige Konfiguration
METADATA_FETCH_FAILED400SAML-Metadaten-URL konnte nicht abgerufen oder geparst werden
DISCOVERY_FETCH_FAILED400OIDC-Discovery-Dokument konnte nicht abgerufen oder geparst werden
SSO_CONNECTION_EXISTS409Eine SSO-Verbindung dieses Typs existiert für die Organisation bereits
GET/api/organizations/[orgId]/sso/connections/[id]Requires: view:sso_connections

Gibt vollständige Details für eine bestimmte SSO-Verbindung zurück, einschließlich der Konfiguration (mit geschwärzten Secrets), SP-Metadatenwerte und zugehörige Domains.

Erfolgsantwort

{ "ok": true, "data": { "id": "sso_abc123", "type": "saml", "name": "Acme Corporate SAML", "status": "ACTIVE", "keycloakIdpAlias": "acme-saml-abc123", "config": { "entityId": "https://idp.acme-corp.com", "ssoUrl": "https://idp.acme-corp.com/saml2/sso", "certificate": "-----BEGIN CERTIFICATE-----\nMIIDpD..." }, "acsUrl": "https://api.altovar.net/api/auth/sso/callback", "spEntityId": "https://api.altovar.net", "domains": ["acme-corp.com"], "createdAt": "2025-01-20T09:00:00Z", "updatedAt": "2025-02-01T14:30:00Z" } }
PATCH/api/organizations/[orgId]/sso/connections/[id]Requires: manage:sso_connections

Aktualisiert den Namen oder die Konfiguration einer SSO-Verbindung. Der Verbindungstyp (saml oder oidc) kann nach der Erstellung nicht geändert werden. Das Aktualisieren der Konfiguration löst eine Neusynchronisierung mit dem Keycloak-IdP-Broker aus.

Anfrage-Body

{ "name": "Acme Corporate SAML (Aktualisiert)", "config": { "ssoUrl": "https://new-idp.acme-corp.com/saml2/sso", "certificate": "-----BEGIN CERTIFICATE-----\nMIIEnD..." } }

Erfolgsantwort

{ "ok": true, "data": { "id": "sso_abc123", "type": "saml", "name": "Acme Corporate SAML (Aktualisiert)", "status": "ACTIVE", "updatedAt": "2025-02-18T11:00:00Z" } }
DELETE/api/organizations/[orgId]/sso/connections/[id]Requires: manage:sso_connections

Löscht eine SSO-Verbindung. Der entsprechende Keycloak Identity Provider wird entfernt. Benutzer, die sich zuvor über diese Verbindung authentifiziert haben, fallen auf passwortbasiertes Login zurück. Ihre Konten und Daten bleiben erhalten.

Das Löschen einer aktiven SSO-Verbindung betrifft sofort alle Benutzer, die sich darüber authentifizieren. Sie müssen ihr Passwort zurücksetzen (über den Passwort-vergessen-Flow), wenn sie noch kein Passwort gesetzt haben, da SSO-Benutzer JIT-provisioniert werden und kein Passwort haben.

Erfolgsantwort

{ "ok": true, "data": { "deleted": true } }

Aktivieren und Deaktivieren

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

Aktiviert eine PENDING- oder DISABLED-SSO-Verbindung. Nach der Aktivierung werden Benutzer, die sich mit einer E-Mail-Adresse einer verifizierten Domain anmelden, automatisch zum konfigurierten Identity Provider weitergeleitet. Die Aktivierung erfordert mindestens eine verifizierte Domain, die der Organisation zugeordnet ist.

Anfrage: Kein Body erforderlich.

Erfolgsantwort

{ "ok": true, "data": { "activated": true, "status": "ACTIVE" } }

Fehlercodes

CodeHTTPBeschreibung
NO_VERIFIED_DOMAINS400SSO kann ohne mindestens eine verifizierte Domain nicht aktiviert werden
CONNECTION_NOT_FOUND404SSO-Verbindung existiert nicht
POST/api/organizations/[orgId]/sso/connections/[id]/deactivateRequires: manage:sso_connections

Deaktiviert eine aktive SSO-Verbindung. Benutzer mit Domain-E-Mails fallen auf die Standard-Passwort-Authentifizierung zurück. Die Verbindungskonfiguration bleibt erhalten und kann später wieder aktiviert werden.

Anfrage: Kein Body erforderlich.

Erfolgsantwort

{ "ok": true, "data": { "deactivated": true, "status": "DISABLED" } }

Domain-Verifizierung

Die Domain-Verifizierung belegt, dass du eine E-Mail-Domain kontrollierst, bevor die SSO-basierte automatische Weiterleitung für diese Domain aktiviert wird. Die Verifizierung erfolgt über einen DNS-Eintrag (TXT oder CNAME). Sobald eine Domain verifiziert ist, wird jeder Benutzer, der sich mit einer E-Mail-Adresse dieser Domain anmeldet, automatisch zum SSO-Provider der Organisation weitergeleitet.

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

Listet alle Domains auf, die der SSO-Konfiguration einer Organisation zugeordnet sind, einschließlich Verifizierungsstatus, Methode und Token.

Erfolgsantwort

{ "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" }, { "id": "dom_def456", "domain": "acme.io", "status": "PENDING", "verificationMethod": "CNAME", "verificationToken": "auris-verify-ghi789jkl012", "verifiedAt": null, "createdAt": "2025-02-10T08:00:00Z" } ] }

Domain-Verifizierungsstatusarten:

StatusBeschreibung
PENDINGDomain hinzugefügt, DNS-Eintrag noch nicht verifiziert
VERIFYINGVerifizierungsprüfung läuft
ACTIVEDomain erfolgreich verifiziert — SSO-Automatische Weiterleitung für diese Domain ist aktiv
FAILEDVerifizierungsprüfung ausgeführt, aber der erwartete DNS-Eintrag wurde nicht gefunden
POST/api/organizations/[orgId]/sso/domainsRequires: manage:sso_connections

Fügt der Organisation eine Domain hinzu und leitet die Verifizierung ein. Auris generiert ein eindeutiges Verifizierungstoken, das als DNS-Eintrag zur Domain hinzugefügt werden muss. Die Antwort enthält den genauen zu erstellenden DNS-Eintrag.

Anfrage-Body

{ "domain": "acme-corp.com" }

Erfolgsantwort

{ "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" } } }

Füge den in dnsRecord angezeigten DNS-Eintrag bei deinem Domain-Registrar hinzu und rufe dann den Prüf-Endpunkt zur Verifizierung auf.

Fehlercodes

CodeHTTPBeschreibung
DOMAIN_TAKEN409Diese Domain ist bereits bei einer anderen Organisation registriert
VALIDATION_ERROR400Ungültiges Domain-Format
DOMAIN_EXISTS409Diese Domain ist dieser Organisation bereits zugeordnet

Auris unterstützt zwei DNS-Verifizierungsmethoden. TXT-Einträge (Standard) erfordern das Hinzufügen eines TXT-Eintrags unter _auris-verify.ihredomain.com. CNAME-Einträge erfordern das Verweisen eines CNAME auf verify.your-auris-domain.com. Die Methode wird automatisch basierend auf der Domain-Konfiguration gewählt, TXT wird jedoch bevorzugt, da es bestehende DNS-Einträge nicht beeinträchtigt.

POST/api/organizations/[orgId]/sso/domains/[id]/checkRequires: manage:sso_connections

Löst eine Live-DNS-Abfrage zur Verifizierung der Domain aus. Auris führt eine DNS-TXT-(oder CNAME-)Abfrage mit dns.promises.resolveTxt() durch und prüft auf das Verifizierungstoken. Gibt den aktualisierten Domain-Status sofort zurück.

Anfrage: Kein Body erforderlich.

Erfolgsantwort — verifiziert

{ "ok": true, "data": { "domain": "acme-corp.com", "status": "ACTIVE", "verifiedAt": "2025-02-18T15:00:00Z" } }

Erfolgsantwort — noch nicht propagiert

{ "ok": true, "data": { "domain": "acme-corp.com", "status": "PENDING", "message": "TXT record not found yet. DNS propagation can take up to 48 hours." } }

Erfolgsantwort — fehlgeschlagen

{ "ok": true, "data": { "domain": "acme-corp.com", "status": "FAILED", "message": "DNS lookup completed but the verification token was not found in any TXT records." } }

Die DNS-Propagierung dauert in der Regel einige Minuten, kann in seltenen Fällen aber bis zu 48 Stunden dauern. Du kannst den Prüf-Endpunkt wiederholt aufrufen, bis der Status zu ACTIVE wechselt. Ein FAILED-Status blockiert die Verifizierung nicht dauerhaft — korrigiere den DNS-Eintrag und rufe die Prüfung erneut auf.

Öffentliche SSO-Endpunkte

Diese Endpunkte werden von der gehosteten Auris-Login-Seite und dem SDK verwendet, um den SSO-Flow durchzuführen. Sie erfordern keine Authentifizierung.

POST/api/auth/sso/detect

Erkennt, ob die E-Mail-Domain eines Benutzers eine aktive Enterprise-SSO-Verbindung hat. Verwende dies, um “intelligente” Login-Formulare zu erstellen, die Enterprise-Benutzer automatisch zu ihrem SSO-Provider weiterleiten, anstatt das Passwortfeld anzuzeigen.

Anfrage-Body

{ "email": "[email protected]" }

Antwort — SSO verfügbar

{ "ok": true, "data": { "ssoAvailable": true, "provider": "saml", "loginUrl": "https://api.altovar.net/api/auth/sso/login/acme-saml-abc123" } }

Antwort — kein SSO

{ "ok": true, "data": { "ssoAvailable": false, "provider": null, "loginUrl": null } }

Die Antwort ist immer 200 OK, unabhängig davon, ob die Domain SSO konfiguriert hat, um Informationslecks darüber zu verhindern, welche Organisationen SSO verwenden.

GET/api/auth/sso/login/[alias]

Leitet den SSO-Login-Flow ein. Leitet den Browser zur Login-Seite des konfigurierten Identity Providers weiter. Der alias ist der Keycloak-IdP-Alias, der beim Erstellen der SSO-Verbindung zurückgegeben wird (das Feld keycloakIdpAlias).

Dieser Endpunkt ist eine Browser-Weiterleitung, kein API-Aufruf. Der typische Flow:

  1. Client erkennt SSO über POST /api/auth/sso/detect
  2. Client leitet den Browser zur loginUrl aus der Erkennungsantwort weiter
  3. Auris leitet zur Login-Seite des IdP weiter
  4. Benutzer authentifiziert sich beim IdP
  5. IdP leitet zurück zum Callback-Endpunkt von Auris
  6. Auris stellt Tokens aus und leitet zur Callback-URL der Anwendung weiter

Abfrageparameter

ParameterTypBeschreibung
redirect_uristringOptional. Wohin der Benutzer nach erfolgreicher SSO-Authentifizierung weitergeleitet wird. Muss eine registrierte Weiterleitungs-URI der Anwendung sein.
GET/api/auth/sso/callback

SSO-Callback-Endpunkt. Der Identity Provider leitet den Benutzer nach erfolgreicher Authentifizierung hierher weiter. Auris validiert die SSO-Assertion (SAML-Antwort oder OIDC-Autorisierungscode), führt bei Bedarf JIT-Benutzer-Provisionierung durch und stellt Auris-Tokens aus.

Dieser Endpunkt wird vom Identity Provider aufgerufen, nicht direkt von deiner Anwendung.

JIT (Just-In-Time)-Provisionierung

Wenn sich ein Benutzer zum ersten Mal über SSO authentifiziert und noch kein Auris-Konto hat, führt Auris automatisch folgendes durch:

  1. Erstellt ein neues Benutzerkonto mit Attributen aus der SSO-Assertion (E-Mail, Vorname, Nachname)
  2. Verknüpft den Benutzer mit der Organisation, der die SSO-Verbindung gehört
  3. Weist die Standard-Mitgliederrolle zu (MEMBER)
  4. Stellt Standard-Auris-Zugriffs- und Refresh-Tokens aus

Bei nachfolgenden Logins wird der bestehende Benutzerdatensatz anhand der E-Mail-Adresse abgeglichen und Tokens werden direkt ausgestellt.

Weiterleitung bei Erfolg

Nach erfolgreicher Authentifizierung wird der Benutzer mit einem Autorisierungscode zur registrierten Callback-URL der Anwendung weitergeleitet:

https://app.ihredomain.com/callback?code=auth_code_xxx&state=original_state

Der Autorisierungscode kann dann mit dem Standard-Endpunkt POST /api/auth/token mit grant_type=authorization_code gegen Tokens ausgetauscht werden.

Fehlerbehandlung

Wenn die SSO-Assertion ungültig ist oder der IdP einen Fehler zurückgibt, wird der Benutzer mit Fehlerparametern zur Anwendungs-Callback-URL weitergeleitet:

https://app.ihredomain.com/callback?error=sso_failed&error_description=SAML+assertion+validation+failed&state=original_state
FehlerBeschreibung
sso_failedDie SSO-Assertion konnte nicht validiert werden
sso_connection_disabledDie SSO-Verbindung wurde deaktiviert
sso_connection_not_foundDer IdP-Alias stimmt mit keiner konfigurierten SSO-Verbindung überein
email_mismatchDie E-Mail aus der SSO-Assertion stimmt nicht mit einer verifizierten Domain überein

Berechtigungsreferenz

BerechtigungBeschreibung
view:sso_connectionsSSO-Verbindungen und Domain-Verifizierungsstatus anzeigen
manage:sso_connectionsSSO-Verbindungen erstellen, aktualisieren, löschen, aktivieren und deaktivieren; Domain-Verifizierung verwalten

Die Berechtigung manage:sso_connections schließt view:sso_connections ein. Benutzer mit manage:sso_connections können alle SSO-bezogenen Operationen durchführen.

Implementierungshinweise

Keycloak IdP-Brokering: Im Hintergrund erstellt und verwaltet Auris Keycloak-Identity-Provider-Konfigurationen. Jede SSO-Verbindung entspricht einem Keycloak-IdP mit einem eindeutigen Alias. Der Keycloak-Realm für die Verbindung wird durch das Feld keycloakRealm im Verbindungsdatensatz bestimmt. Dies ist ein Implementierungsdetail — deine Anwendung interagiert nur mit der Auris-API.

Zertifikatsrotation: Für SAML-Verbindungen aktualisierst du das Feld certificate in der Verbindungskonfiguration, wenn der IdP sein Signaturzertifikat rotiert. Auris erkennt Zertifikatsänderungen nicht automatisch. Während der Rotation kannst du vorübergehend sowohl das alte als auch das neue Zertifikat behalten, indem du die Verbindung vor Ablauf des alten Zertifikats aktualisierst.

OIDC-Discovery-Caching: Bei Verwendung von OIDC speichert Auris das Discovery-Dokument im Cache. Wenn der IdP seine Endpunkte ändert, aktualisiere die discoveryUrl oder warte auf den Ablauf des Caches (ca. 1 Stunde).


Verwandte Themen