Skip to Content

SCIM 2.0-Provisionierungs-API

Auris implementiert das SCIM 2.0-Protokoll (System for Cross-domain Identity Management) für die automatisierte Benutzer- und Gruppenbereitstellung. SCIM ermöglicht Identity Providern wie Okta, Azure AD (Entra ID), OneLogin und JumpCloud, Benutzerkonten in Auris automatisch zu erstellen, zu aktualisieren und zu deaktivieren, wenn im IdP-Verzeichnis Änderungen vorgenommen werden.

Die SCIM-API folgt den Spezifikationen RFC 7643  (Core Schema) und RFC 7644  (Protokoll).

SCIM-Verbindungseinrichtung

Bevor dein IdP Benutzer bereitstellen kann, musst du eine SCIM-Verbindung in der Auris-Konsole erstellen:

  1. Gehe zu Konsole > Einstellungen > SCIM-Provisionierung
  2. Klicke auf Verbindung hinzufügen
  3. Notiere dir die SCIM-Basis-URL und den Bearer-Token
  4. Konfiguriere diese in den SCIM-Integrationseinstellungen deines IdP

Die SCIM-Basis-URL hat folgendes Format:

https://ihre-auris-domain.com/api/scim/v2

Authentifizierung

Alle SCIM-Endpunkte verwenden Bearer-Token-Authentifizierung. Das Token wird beim Erstellen einer SCIM-Verbindung in der Auris-Konsole generiert.

Authorization: Bearer scim_token_here

Das Token authentifiziert den IdP und identifiziert, welche SCIM-Verbindungskonfiguration verwendet werden soll (einschließlich des Ziel-Keycloak-Realms und der Attributzuordnungen).

SCIM-Token sind langlebig und gewähren vollen Provisionierungszugriff. Behandle sie als Geheimnisse. Rotiere Token regelmäßig über die Auris-Konsole.

Verbindungsverwaltung

Diese Endpunkte dienen der Verwaltung von SCIM-Verbindungen über die Auris-Konsole (Admin-API). Sie sind nicht Teil des SCIM-Protokolls selbst.

GET/api/scim/connectionsRequires: view:scim_connections

Alle SCIM-Verbindungen für den Tenant auflisten.

Erfolgsantwort

{ "ok": true, "data": [ { "id": "scim_conn_abc123", "name": "Okta Produktion", "provider": "okta", "keycloakRealm": "acme-corp", "isActive": true, "lastSyncAt": "2025-02-18T09:00:00Z", "userCount": 245, "groupCount": 12, "createdAt": "2025-01-15T10:00:00Z" } ] }
POST/api/scim/connectionsRequires: manage:scim_connections

Eine neue SCIM-Verbindung erstellen. Gibt die Verbindungsdetails einschließlich des generierten Bearer-Tokens zurück. Das Token wird nur einmal zurückgegeben — speichere es sicher.

Anforderungs-Body

{ "name": "Okta Produktion", "provider": "okta", "keycloakRealm": "acme-corp" }

Erfolgsantwort

{ "ok": true, "data": { "id": "scim_conn_def456", "name": "Okta Produktion", "provider": "okta", "keycloakRealm": "acme-corp", "token": "scim_abc123def456...", "baseUrl": "https://ihre-auris-domain.com/api/scim/v2", "isActive": true, "createdAt": "2025-02-18T10:00:00Z" } }

Benutzer

Benutzer auflisten

GET/api/scim/v2/UsersRequires: SCIM Bearer-Token

Benutzer im Tenant auflisten. Unterstützt SCIM-Filterung, Paginierung und Attributauswahl. Gibt Benutzer im SCIM Core Schema-Format zurück.

Abfrageparameter

ParameterTypBeschreibung
filterstringSCIM-Filterausdruck (siehe Filtersyntax)
startIndexinteger1-basierter Startindex (Standard: 1)
countintegerMaximale Ergebnisse pro Seite (Standard: 20, max: 100)
sortBystringAttribut zum Sortieren (z. B. userName)
sortOrderascending | descendingSortierrichtung (Standard: ascending)
attributesstringKommagetrennte Liste der einzuschließenden Attribute
excludedAttributesstringKommagetrennte Liste der auszuschließenden Attribute

Beispielanfrage

GET /api/scim/v2/Users?filter=userName eq "[email protected]"&count=10

Erfolgsantwort

{ "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"], "totalResults": 245, "startIndex": 1, "itemsPerPage": 20, "Resources": [ { "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"], "id": "usr_abc123", "externalId": "okta_user_001", "userName": "[email protected]", "name": { "givenName": "Alice", "familyName": "Smith", "formatted": "Alice Smith" }, "displayName": "Alice Smith", "emails": [ { "value": "[email protected]", "type": "work", "primary": true } ], "phoneNumbers": [ { "value": "+39021234567", "type": "work" } ], "active": true, "groups": [ { "value": "group_eng", "display": "Engineering" } ], "meta": { "resourceType": "User", "created": "2025-01-15T10:00:00Z", "lastModified": "2025-02-18T09:00:00Z", "location": "https://ihre-auris-domain.com/api/scim/v2/Users/usr_abc123" } } ] }

SCIM-Antworten verwenden das SCIM-Schemaformat (nicht den standardmäßigen Auris-API-Umschlag). Das Feld schemas, das Resources-Array und das meta-Objekt sind durch die SCIM-Spezifikation erforderlich.

Benutzer abrufen

GET/api/scim/v2/Users/[id]Requires: SCIM Bearer-Token

Einen einzelnen Benutzer anhand seiner Auris-Benutzer-ID abrufen. Gibt die vollständige SCIM-Benutzerdarstellung zurück.

Erfolgsantwort

{ "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"], "id": "usr_abc123", "externalId": "okta_user_001", "userName": "[email protected]", "name": { "givenName": "Alice", "familyName": "Smith", "formatted": "Alice Smith" }, "displayName": "Alice Smith", "emails": [ { "value": "[email protected]", "type": "work", "primary": true } ], "active": true, "groups": [ { "value": "group_eng", "display": "Engineering" } ], "meta": { "resourceType": "User", "created": "2025-01-15T10:00:00Z", "lastModified": "2025-02-18T09:00:00Z", "location": "https://ihre-auris-domain.com/api/scim/v2/Users/usr_abc123" } }

Fehlerantwort (SCIM-Format)

{ "schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"], "detail": "User not found", "status": "404" }

Benutzer erstellen

POST/api/scim/v2/UsersRequires: SCIM Bearer-Token

Ein neues Benutzerkonto erstellen. Der Benutzer wird sowohl in der Auris-Datenbank als auch im Keycloak-Realm erstellt, der mit der SCIM-Verbindung verknüpft ist. Wenn externalId angegeben ist, wird es für die zukünftige Abgleichung gespeichert.

Anforderungs-Body

{ "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"], "externalId": "okta_user_002", "userName": "[email protected]", "name": { "givenName": "Bob", "familyName": "Jones" }, "displayName": "Bob Jones", "emails": [ { "value": "[email protected]", "type": "work", "primary": true } ], "active": true }

SCIM-zu-Auris-Feldzuordnung (Standard)

SCIM-FeldAuris-FeldHinweise
userNameemail / scimUserNameAls primärer Bezeichner verwendet
externalIdscimExternalIdEindeutiger Bezeichner auf IdP-Seite
name.givenNamefirstName
name.familyNamelastName
displayNameBerechnetfirstName + " " + lastName
emails[primary].valueemailPrimäre E-Mail wird zur Auris-E-Mail
phoneNumbers[0].valuephoneNumber
activeenabled

Erfolgsantwort (HTTP 201)

{ "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"], "id": "usr_new789", "externalId": "okta_user_002", "userName": "[email protected]", "name": { "givenName": "Bob", "familyName": "Jones", "formatted": "Bob Jones" }, "displayName": "Bob Jones", "emails": [ { "value": "[email protected]", "type": "work", "primary": true } ], "active": true, "meta": { "resourceType": "User", "created": "2025-02-18T10:00:00Z", "lastModified": "2025-02-18T10:00:00Z", "location": "https://ihre-auris-domain.com/api/scim/v2/Users/usr_new789" } }

Fehlerantwort

{ "schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"], "detail": "User with userName '[email protected]' already exists", "status": "409", "scimType": "uniqueness" }

Benutzer ersetzen (vollständige Aktualisierung)

PUT/api/scim/v2/Users/[id]Requires: SCIM Bearer-Token

Eine Benutzerressource vollständig ersetzen. Alle SCIM-Attribute im Anforderungs-Body ersetzen die aktuellen Werte. Nicht im Anforderungs-Body enthaltene Attribute werden gelöscht (auf null/leer gesetzt).

Anforderungs-Body

{ "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"], "externalId": "okta_user_001", "userName": "[email protected]", "name": { "givenName": "Alicia", "familyName": "Smith-Jones" }, "emails": [ { "value": "[email protected]", "type": "work", "primary": true } ], "active": true }

Erfolgsantwort: Vollständige SCIM-Benutzerdarstellung (gleiches Format wie GET).

Teilweise Aktualisierung (PATCH)

PATCH/api/scim/v2/Users/[id]Requires: SCIM Bearer-Token

Einen Benutzer teilweise mit SCIM PATCH-Operationen aktualisieren. Dies ist die am häufigsten von IdPs verwendete Aktualisierungsmethode. Unterstützt die Operationen add, replace und remove.

Anforderungs-Body — Benutzer deaktivieren

{ "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"], "Operations": [ { "op": "replace", "path": "active", "value": false } ] }

Anforderungs-Body — Mehrere Felder aktualisieren

{ "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"], "Operations": [ { "op": "replace", "path": "name.familyName", "value": "Smith-Jones" }, { "op": "replace", "path": "emails[type eq \"work\"].value", "value": "[email protected]" } ] }

PATCH-Operationstypen

OperationBeschreibung
addNeuen Wert zu einem mehrwertigen Attribut hinzufügen oder ein einwertiges Attribut setzen
replaceDen aktuellen Wert eines Attributs ersetzen
removeEinen Attributwert entfernen

Erfolgsantwort: Vollständige SCIM-Benutzerdarstellung, die den aktualisierten Zustand widerspiegelt.

Benutzer löschen

DELETE/api/scim/v2/Users/[id]Requires: SCIM Bearer-Token

Einen Benutzer löschen (deaktivieren). In Auris führt SCIM-Delete einen Soft-Delete durch: Der Benutzer wird deaktiviert und sein Keycloak-Konto entfernt, aber der Datenbankdatensatz wird für Prüfungszwecke aufbewahrt.

Erfolgsantwort: HTTP 204 No Content (leerer Body, gemäß SCIM-Spezifikation).

Gruppen

Gruppen auflisten

GET/api/scim/v2/GroupsRequires: SCIM Bearer-Token

Gruppen im Tenant auflisten. Gruppen in Auris entsprechen Rollen. Unterstützt SCIM-Filterung und Paginierung.

Abfrageparameter

ParameterTypBeschreibung
filterstringSCIM-Filterausdruck
startIndexinteger1-basierter Startindex (Standard: 1)
countintegerMaximale Ergebnisse pro Seite (Standard: 20)

Erfolgsantwort

{ "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"], "totalResults": 5, "startIndex": 1, "itemsPerPage": 20, "Resources": [ { "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"], "id": "role_abc123", "displayName": "engineering", "members": [ { "value": "usr_abc123", "display": "[email protected]" }, { "value": "usr_def456", "display": "[email protected]" } ], "meta": { "resourceType": "Group", "created": "2025-01-01T00:00:00Z", "lastModified": "2025-02-15T10:00:00Z", "location": "https://ihre-auris-domain.com/api/scim/v2/Groups/role_abc123" } } ] }

Gruppe abrufen

GET/api/scim/v2/Groups/[id]Requires: SCIM Bearer-Token

Eine einzelne Gruppe anhand der ID abrufen, einschließlich der Mitgliederliste.

Gruppe erstellen

POST/api/scim/v2/GroupsRequires: SCIM Bearer-Token

Eine neue Gruppe (Rolle) mit optionalen Anfangsmitgliedern erstellen.

Anforderungs-Body

{ "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"], "displayName": "marketing", "members": [ { "value": "usr_abc123" } ] }

Erfolgsantwort (HTTP 201): Vollständige SCIM-Gruppendarstellung.

Gruppe ersetzen

PUT/api/scim/v2/Groups/[id]Requires: SCIM Bearer-Token

Eine Gruppenressource vollständig ersetzen. Die Mitgliederliste in der Anfrage ersetzt die aktuellen Mitglieder.

Gruppe teilweise aktualisieren

PATCH/api/scim/v2/Groups/[id]Requires: SCIM Bearer-Token

Eine Gruppe mit SCIM PATCH-Operationen teilweise aktualisieren. Wird am häufigsten zum Hinzufügen oder Entfernen von Mitgliedern verwendet.

Anforderungs-Body — Mitglieder hinzufügen

{ "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"], "Operations": [ { "op": "add", "path": "members", "value": [ { "value": "usr_ghi789" }, { "value": "usr_jkl012" } ] } ] }

Anforderungs-Body — Mitglied entfernen

{ "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"], "Operations": [ { "op": "remove", "path": "members[value eq \"usr_abc123\"]" } ] }

Gruppe löschen

DELETE/api/scim/v2/Groups/[id]Requires: SCIM Bearer-Token

Eine Gruppe (Rolle) löschen. Alle Mitglieder werden entfernt. Gibt HTTP 204 No Content zurück.

Massenoperationen

POST/api/scim/v2/BulkRequires: SCIM Bearer-Token

Mehrere SCIM-Operationen in einer einzigen Anfrage ausführen. Unterstützt bis zu 100 Operationen pro Anfrage. Jede Operation wird unabhängig verarbeitet — ein Fehler bei einer Operation verhindert nicht die Ausführung anderer. Entspricht RFC 7644 Abschnitt 3.7.

Anforderungs-Body

{ "schemas": ["urn:ietf:params:scim:api:messages:2.0:BulkRequest"], "Operations": [ { "method": "POST", "path": "/Users", "bulkId": "user1", "data": { "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"], "userName": "[email protected]", "name": { "givenName": "Charlie", "familyName": "Brown" }, "emails": [{ "value": "[email protected]", "primary": true }], "active": true } }, { "method": "PATCH", "path": "/Users/usr_abc123", "data": { "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"], "Operations": [ { "op": "replace", "path": "active", "value": false } ] } }, { "method": "DELETE", "path": "/Users/usr_old999" } ] }

Erfolgsantwort

{ "schemas": ["urn:ietf:params:scim:api:messages:2.0:BulkResponse"], "Operations": [ { "method": "POST", "bulkId": "user1", "status": "201", "location": "https://ihre-auris-domain.com/api/scim/v2/Users/usr_new123", "response": { "id": "usr_new123", "userName": "[email protected]" } }, { "method": "PATCH", "location": "https://ihre-auris-domain.com/api/scim/v2/Users/usr_abc123", "status": "200" }, { "method": "DELETE", "location": "https://ihre-auris-domain.com/api/scim/v2/Users/usr_old999", "status": "204" } ] }

Beispiel für fehlgeschlagene Operation

{ "method": "POST", "bulkId": "user2", "status": "409", "response": { "schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"], "detail": "User with userName '[email protected]' already exists", "scimType": "uniqueness" } }

Limits

LimitWert
Maximale Operationen pro Anfrage100
Unterstützte MethodenPOST, PUT, PATCH, DELETE
GET in BulkNicht unterstützt (stattdessen Listen-Endpunkte verwenden)

Massenoperationen sind nicht-transaktional. Jede Operation wird unabhängig verarbeitet. Wenn Operation #3 fehlschlägt, werden Operationen #1, #2, #4 usw. trotzdem verarbeitet. Prüfe das Feld status jeder Operation in der Antwort.

Filtersyntax

Die SCIM-Filtersyntax (RFC 7644 Abschnitt 3.4.2.2) unterstützt Attributvergleiche, logische Operatoren und Gruppierung. Auris implementiert einen rekursiven Abstiegs-Parser, der die vollständige Filtergrammatik verarbeitet.

Vergleichsoperatoren

OperatorBeschreibungBeispiel
eqGleichuserName eq "[email protected]"
neUngleichactive ne false
coEnthält (Teilstring)name.familyName co "smith"
swBeginnt mituserName sw "alice"
ewEndet mituserName ew "@example.com"
gtGrößer alsmeta.lastModified gt "2025-01-01T00:00:00Z"
ltKleiner alsmeta.created lt "2025-02-01T00:00:00Z"
geGrößer oder gleichmeta.lastModified ge "2025-01-01T00:00:00Z"
leKleiner oder gleichmeta.created le "2025-02-01T00:00:00Z"
prVorhanden (Attribut existiert und ist nicht leer)phoneNumbers pr

Logische Operatoren

OperatorBeschreibungBeispiel
andBeide Bedingungen müssen wahr seinactive eq true and name.familyName co "smith"
orMindestens eine Bedingung muss wahr seinuserName eq "[email protected]" or userName eq "[email protected]"

Gruppierung

Verwende Klammern zur Steuerung der Auswertungsreihenfolge:

(active eq true) and (name.familyName eq "Smith" or name.familyName eq "Jones")

Punkt-Notation für Attributpfade

Verschachtelte Attribute verwenden Punkt-Notation:

name.givenName eq "Alice" emails[type eq "work"].value sw "alice"

Filterbeispiele

Benutzer nach E-Mail suchen:

GET /api/scim/v2/Users?filter=userName eq "[email protected]"

Alle aktiven Benutzer mit einem bestimmten Nachnamen finden:

GET /api/scim/v2/Users?filter=active eq true and name.familyName eq "Smith"

Benutzer finden, die nach einem bestimmten Datum geändert wurden:

GET /api/scim/v2/Users?filter=meta.lastModified gt "2025-02-01T00:00:00Z"

Benutzer mit Telefonnummer finden:

GET /api/scim/v2/Users?filter=phoneNumbers pr

Attributzuordnung

Auris unterstützt benutzerdefinierte Attributzuordnungen zwischen SCIM-Attributen und Auris-Benutzerfeldern. Zuordnungen können pro SCIM-Verbindung über die Konsole oder die API konfiguriert werden.

GET/api/scim/connections/[id]/mappingsRequires: manage:scim_connections

Attributzuordnungen für eine SCIM-Verbindung auflisten.

Erfolgsantwort

{ "ok": true, "data": [ { "id": "map_abc123", "scimAttribute": "userName", "aurisAttribute": "email", "direction": "both", "isActive": true }, { "id": "map_def456", "scimAttribute": "name.givenName", "aurisAttribute": "firstName", "direction": "both", "isActive": true }, { "id": "map_ghi789", "scimAttribute": "urn:custom:department", "aurisAttribute": "metadata.department", "direction": "inbound", "isActive": true } ] }

Zuordnungsrichtungen

RichtungBeschreibung
inboundNur IdP zu Auris (wird bei der Provisionierung vom IdP verwendet)
outboundNur Auris zu IdP (wird verwendet, wenn der IdP von Auris liest)
bothBidirektionale Zuordnung
POST/api/scim/connections/[id]/mappingsRequires: manage:scim_connections

Eine neue Attributzuordnung erstellen.

Anforderungs-Body

{ "scimAttribute": "urn:custom:department", "aurisAttribute": "metadata.department", "direction": "inbound" }
DELETE/api/scim/connections/[id]/mappings/[mappingId]Requires: manage:scim_connections

Eine Attributzuordnung löschen.

Synchronisationsstatistiken

GET/api/scim/connections/[id]/statsRequires: view:scim_connections

Provisionierungsstatistiken für eine SCIM-Verbindung abrufen, aufgeteilt nach Zeitraum.

Erfolgsantwort

{ "ok": true, "data": { "last24Hours": { "created": 5, "updated": 12, "deactivated": 1, "errors": 0 }, "last7Days": { "created": 23, "updated": 89, "deactivated": 4, "errors": 2 }, "last30Days": { "created": 67, "updated": 312, "deactivated": 11, "errors": 5 } } }

Verbindungstest

POST/api/scim/connections/[id]/testRequires: manage:scim_connections

Eine SCIM-Verbindung durch eine Integritätsprüfung testen. Überprüft, ob das Bearer-Token gültig ist, das Keycloak-Realm erreichbar ist und die Verbindung Benutzer auflisten kann.

Erfolgsantwort

{ "ok": true, "data": { "success": true, "tokenValid": true, "realmAccessible": true, "userCount": 245, "latency": 89 } }

Fehlgeschlagener Test

{ "ok": true, "data": { "success": false, "tokenValid": true, "realmAccessible": false, "error": "Keycloak realm 'acme-corp' is not reachable" } }

SCIM-Fehlerformat

SCIM-Fehler folgen dem RFC 7644-Fehlerschema:

{ "schemas": ["urn:ietf:params:scim:api:messages:2.0:Error"], "detail": "Für Menschen lesbare Fehlerbeschreibung", "status": "400", "scimType": "invalidValue" }

SCIM-Fehlertypen

scimTypeHTTP-StatusBeschreibung
invalidValue400Anfrage enthält einen ungültigen Attributwert
invalidFilter400Filterausdruck hat einen Syntaxfehler
tooMany400Massenanfrage überschreitet die maximale Operationsanzahl
uniqueness409Attributwert verletzt eine Eindeutigkeitsbeschränkung (z. B. doppelte E-Mail)
mutability400Versuch, ein schreibgeschütztes Attribut zu ändern
(keiner)401Ungültiges oder fehlendes Bearer-Token
(keiner)404Ressource nicht gefunden

IdP-spezifische Hinweise

Okta

Okta sendet userName standardmäßig als E-Mail des Benutzers. Die Okta SCIM-App unterstützt:

  • Benutzerbereitstellung (erstellen, aktualisieren, deaktivieren)
  • Gruppen-Push (Okta-Gruppen zu Auris-Rollen zuweisen)
  • Profilsynchronisation (Attributzuordnung in der Okta-Admin-Oberfläche)

Setze die SCIM-Connector-Basis-URL auf https://ihre-auris-domain.com/api/scim/v2 und die Authentifizierung auf HTTP Header mit dem Bearer-Token.

Azure AD (Entra ID)

Azure AD verwendet externalId als primären Abstimmungsschlüssel. Konfiguriere:

  • Provisionierungsmodus: Automatisch
  • Tenant-URL: https://ihre-auris-domain.com/api/scim/v2
  • Geheimes Token: dein SCIM-Bearer-Token
  • Zuordnung: Ordne userPrincipalName userName zu

Azure AD sendet PATCH-Anfragen mit einem leicht nicht-standardmäßigen Format für mehrwertige Attribute. Auris behandelt diese Variationen automatisch.

OneLogin

OneLogin unterstützt SCIM 2.0-Provisionierung. Konfiguriere die SCIM-Basis-URL und das Bearer-Token in den Provisionierungseinstellungen der OneLogin-App. OneLogin verwendet externalId für die Benutzerabgleichung.

Berechtigungsreferenz

BerechtigungBeschreibung
manage:scim_connectionsSCIM-Verbindungen und Attributzuordnungen erstellen, aktualisieren und löschen
view:scim_connectionsSCIM-Verbindungen und Synchronisationsstatistiken anzeigen
view:scim_logsSCIM-Provisionierungsprotokolle anzeigen

Die SCIM-Protokoll-Endpunkte (/api/scim/v2/*) verwenden Bearer-Token-Authentifizierung aus der SCIM-Verbindung, nicht die standardmäßigen Auris-Admin-Berechtigungen. Die oben aufgeführten Berechtigungen gelten nur für die Verbindungsverwaltungs-Endpunkte in der Auris-Konsole.


Verwandte Themen