Skip to Content

SCIM 2.0 Protokoll

Das Problem: Manuelle Provisionierung skaliert nicht

Wenn ein Unternehmen einen neuen Mitarbeiter einstellt, braucht diese Person Konten in Dutzenden von Systemen: E-Mail, Chat, Projektmanagement, CRM, Quellcodeverwaltung, Identitätsanbieter und jedes SaaS-Produkt, das das Team verwendet. Wenn dieser Mitarbeiter das Unternehmen verlässt, müssen alle diese Konten sofort deaktiviert werden — nicht „wenn sich jemand daran erinnert.”

Manuelle Provisionierung schafft mehrere Problemkategorien:

ProblemAuswirkung
Onboarding-VerzögerungNeue Mitarbeiter warten Stunden oder Tage auf die Kontoerstellung
Offboarding-LückenEhemalige Mitarbeiter behalten Zugriff auf Systeme, weil jemand vergessen hat, sie zu deprovisionieren
Verwaiste KontenKonten, die niemandem gehören, häufen sich über die Zeit an
Attribut-DriftAbteilung, Titel oder Manager eines Benutzers ändert sich in HR, aber nicht in nachgelagerten Systemen
Compliance-RisikoPrüfer fragen „Beweisen Sie, dass Mitarbeiter X innerhalb von 24 Stunden den Zugriff verloren hat” — und die Antwort ist oft „Das können wir nicht beweisen”
IT-BelastungProvisionierung und Deprovisionierung ist repetitive, fehleranfällige Arbeit

Die Lösung ist automatisierte Provisionierung: Der Identitätsanbieter (Okta, Azure AD, OneLogin, JumpCloud) pusht Benutzer-Lebenszyklusereignisse in Echtzeit an nachgelagerte Anwendungen.

Was SCIM löst

SCIM (System for Cross-domain Identity Management) ist eine standardisierte REST-API für Benutzer-Provisionierung, definiert in zwei RFCs:

  • RFC 7643: Das SCIM Core Schema — definiert das Datenmodell (User, Group, EnterpriseUser)
  • RFC 7644: Das SCIM-Protokoll — definiert die REST-Operationen, Filterung, Paginierung und Bulk-Operationen

SCIM gibt jedem Identitätsanbieter und jedem Dienstanbieter eine gemeinsame Sprache. Wenn Okta einen Benutzer in Auris erstellen muss, spricht es SCIM. Wenn Azure AD einen Benutzer deaktivieren muss, spricht es SCIM.

SCIM ist ein Inbound-Provisionierungsprotokoll in Auris. Der IdP pusht Änderungen an Auris — Auris pollt nicht beim IdP. Das bedeutet, die Provisionierung ist nahezu Echtzeit: Wenn ein Admin einen Benutzer in Okta zuweist, kommt der SCIM-POST innerhalb von Sekunden bei Auris an.

SCIM-Ressourcentypen

SCIM definiert zwei Kernressourcentypen:

Benutzer (/Users)

Die User-Ressource repräsentiert eine Identität mit Attributen, die dem SCIM Core Schema zugeordnet sind:

{ "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"], "id": "usr_abc123", "externalId": "okta-user-id-456", "userName": "[email protected]", "name": { "givenName": "Jane", "familyName": "Doe", "formatted": "Jane Doe" }, "emails": [ { "value": "[email protected]", "type": "work", "primary": true } ], "displayName": "Jane Doe", "active": true, "title": "Senior Ingenieurin", "department": "Engineering", "meta": { "resourceType": "User", "created": "2025-01-15T10:30:00Z", "lastModified": "2025-06-20T14:22:00Z", "location": "https://auth.example.com/scim/v2/Users/usr_abc123" } }
AttributSCIM-TypBeschreibung
idStringAuris-zugewiesener eindeutiger Bezeichner (schreibgeschützt)
externalIdStringIdP-zugewiesener Bezeichner (für Korrelation verwendet)
userNameStringEindeutiger Anmeldename (typischerweise E-Mail)
name.givenNameStringVorname
name.familyNameStringNachname
emailsMehrwertigE-Mail-Adressen (primäre markiert)
displayNameStringMenschenlesbarer vollständiger Name
activeBooleanKonto-Aktiviert/Deaktiviert-Status
titleStringBerufsbezeichnung
departmentStringAbteilungsname

Gruppen (/Groups)

Die Group-Ressource repräsentiert eine Sammlung von Benutzern:

{ "schemas": ["urn:ietf:params:scim:schemas:core:2.0:Group"], "id": "grp_xyz789", "displayName": "Engineering", "members": [ { "value": "usr_abc123", "display": "Jane Doe" }, { "value": "usr_def456", "display": "John Smith" } ] }

Gruppen in SCIM werden Rollen oder Teams in nachgelagerten Systemen zugeordnet. Auris ordnet SCIM-Gruppen Keycloak-Gruppen zu, die mit Rollen verknüpft werden können.

SCIM-Operationen

SCIM verwendet Standard-HTTP-Methoden mit REST-Semantik:

Benutzer erstellen

POST /scim/v2/Users Content-Type: application/scim+json Authorization: Bearer scim_token_hier { "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"], "externalId": "okta-user-789", "userName": "[email protected]", "name": { "givenName": "Jane", "familyName": "Doe" }, "emails": [ { "value": "[email protected]", "type": "work", "primary": true } ], "active": true }

Antwort: 201 Created mit der vollständigen User-Ressource einschließlich der Auris-zugewiesenen id.

Benutzer abrufen

GET /scim/v2/Users/usr_abc123 Authorization: Bearer scim_token_hier

Benutzer auflisten

GET /scim/v2/Users?filter=userName eq "[email protected]"&startIndex=1&count=10 Authorization: Bearer scim_token_hier

Antwort: 200 OK mit einer ListResponse:

{ "schemas": ["urn:ietf:params:scim:api:messages:2.0:ListResponse"], "totalResults": 1, "itemsPerPage": 10, "startIndex": 1, "Resources": [ { "id": "usr_abc123", "userName": "[email protected]", "..." : "..." } ] }

Benutzer ersetzen (vollständiges Update)

PUT /scim/v2/Users/usr_abc123 Content-Type: application/scim+json Authorization: Bearer scim_token_hier { "schemas": ["urn:ietf:params:scim:schemas:core:2.0:User"], "userName": "[email protected]", "name": { "givenName": "Jane", "familyName": "Smith" }, "active": true }

Teilweises Update (PATCH)

SCIM PATCH verwendet ein spezifisches Operationsformat aus RFC 7644:

PATCH /scim/v2/Users/usr_abc123 Content-Type: application/scim+json Authorization: Bearer scim_token_hier { "schemas": ["urn:ietf:params:scim:api:messages:2.0:PatchOp"], "Operations": [ { "op": "replace", "path": "active", "value": false }, { "op": "replace", "path": "name.familyName", "value": "Smith" } ] }

PATCH ist die häufigste Operation für die Deprovisionierung: Der IdP sendet { "op": "replace", "path": "active", "value": false }, um den Benutzer zu deaktivieren, ohne den Datensatz zu löschen.

Benutzer löschen

DELETE /scim/v2/Users/usr_abc123 Authorization: Bearer scim_token_hier

Antwort: 204 No Content. In Auris führt DELETE ein Soft-Disable durch (setzt active: false) anstatt dauerhafter Löschung, um die Prüfpfad-Integrität zu erhalten.

Filterung (RFC 7644 Abschnitt 3.4.2.2)

SCIM definiert eine Filterausdrucks-Syntax, die IdPs ermöglicht, nach bestimmten Benutzern zu suchen. Auris implementiert einen rekursiven Descent-Parser für SCIM-Filterausdrücke.

Filteroperatoren

OperatorBedeutungBeispiel
eqGleichuserName eq "[email protected]"
neUngleichactive ne false
coEnthältuserName co "jane"
swBeginnt mituserName sw "jane"
ewEndet mitemails.value ew "@company.com"
prVorhanden (hat Wert)title pr
gtGrößer alsmeta.lastModified gt "2025-01-01T00:00:00Z"
ltKleiner alsmeta.created lt "2025-06-01T00:00:00Z"
geGrößer als oder gleichmeta.lastModified ge "2025-01-01"
leKleiner als oder gleichmeta.created le "2025-12-31"

Zusammengesetzte Filter

Filter können mit and und or kombiniert und mit Klammern gruppiert werden:

filter=userName eq "[email protected]" and active eq true filter=(department eq "Engineering") or (department eq "Product") filter=userName sw "j" and (active eq true or title pr)

SCIM-Filter arbeiten mit SCIM-Attributnamen (z. B. userName, name.familyName), nicht mit Datenbankspaltennamen. Auris ordnet SCIM-Attribute über die Attributzuordnungskonfiguration Prisma-Feldern zu. Wenn ein Filter auf ein nicht zugeordnetes Attribut verweist, wird der Filter-Term ignoriert (nicht abgelehnt), gemäß der SCIM-Spezifikations-Richtlinie zu Best-Effort-Filterung.

Paginierung

SCIM verwendet 1-basierte Index-Paginierung (nicht cursor-basiert):

ParameterBeschreibungStandard
startIndex1-basierter Index des ersten zurückzugebenden Ergebnisses1
countMaximale Anzahl von Ergebnissen pro Seite100
totalResultsGesamtzahl der übereinstimmenden Ressourcen (in Antwort zurückgegeben)—
itemsPerPageTatsächliche Anzahl von Ressourcen in dieser Seite (in Antwort zurückgegeben)—

Bearer-Token-Authentifizierung

SCIM-Endpunkte in Auris sind durch Bearer-Token-Authentifizierung geschützt. Jede SCIM-Verbindung hat ein eindeutiges Token, das in der Auris-Konsole konfiguriert wird.

GET /scim/v2/Users Authorization: Bearer scim_aBcDeFgHiJkLmNoPqRsTuVwXyZ123456
SicherheitsmaßnahmeBeschreibung
Token-HashingTokens werden als SHA-256-Hashes gespeichert, nicht im Klartext
Tenant-IsolationJedes Token ist an einen bestimmten Tenant gebunden
Audit-ProtokollierungJede SCIM-Operation wird mit der Verbindungs-ID protokolliert
IP-AllowlistingOptional: SCIM-Zugriff auf IdP-Quell-IPs über IP-Regeln einschränken

Auris-SCIM-Implementierung

Architektur

Auris implementiert Inbound-SCIM-Provisionierung: Der IdP pusht Benutzer-Lebenszyklusänderungen an Auris. Auris pollt nicht beim IdP.

Dual-Write: Auris + Keycloak

Wenn ein SCIM-POST einen Benutzer erstellt, führt Auris einen Dual-Write durch:

  1. Auris-Datenbank: Erstellt einen TenantUser-Datensatz mit scimExternalId (dem Bezeichner des IdP) und scimUserName (dem Benutzernamen des IdP)
  2. Keycloak: Erstellt einen Benutzer im Keycloak-Realm des Tenants mit übereinstimmenden Attributen

Beide Schreibvorgänge müssen erfolgreich sein. Wenn die Keycloak-Erstellung fehlschlägt, wird der Auris-Datensatz zurückgerollt.

Attributzuordnung

SCIM-Attribute werden nicht immer 1:1 auf Auris-Felder abgebildet. Das ScimAttributeMapping-Modell erlaubt Pro-Verbindungs-Anpassung. Zuordnungen werden pro SCIM-Verbindung in der Auris-Konsole konfiguriert (Integrationen > SCIM > Verbindungsdetails > Registerkarte Zuordnungen).

Bulk-Operationen

Auris unterstützt SCIM-Bulk-Operationen (RFC 7644 Abschnitt 3.7) für Batch-Provisionierung:

POST /scim/v2/Bulk Content-Type: application/scim+json Authorization: Bearer scim_token_hier { "schemas": ["urn:ietf:params:scim:api:messages:2.0:BulkRequest"], "Operations": [ { "method": "POST", "path": "/Users", "data": { "userName": "[email protected]", "name": { "givenName": "Alice", "familyName": "Johnson" }, "active": true } }, { "method": "PATCH", "path": "/Users/usr_alter_mitarbeiter", "data": { "Operations": [ { "op": "replace", "path": "active", "value": false } ] } } ] }

Auris erzwingt maximal 100 Operationen pro Bulk-Anfrage. Jede Operation wird unabhängig verarbeitet — ein Fehler in einer Operation verhindert nicht, dass andere erfolgreich sind.

Bulk-Operationen sind besonders nützlich während der anfänglichen Provisionierung, wenn ein IdP sein gesamtes Benutzerverzeichnis zum ersten Mal mit Auris synchronisiert.

Benutzer-Lebenszyklus

Der vollständige SCIM-gesteuerte Benutzer-Lebenszyklus:

Der Hauptvorteil gegenüber manueller Provisionierung ist die Deprovisionierungsgeschwindigkeit. Wenn ein Mitarbeiter gekündigt wird, entfernt der IdP-Admin seinen Zugriff an einem Ort, und alle verbundenen Anwendungen (einschließlich Auris) deaktivieren den Benutzer innerhalb von Sekunden.

Vergleich: Provisionierungsansätze

DimensionSCIM 2.0Manuelle ProvisionierungJIT-ProvisionierungLDAP-Sync
ProvisionierungsgeschwindigkeitNahezu Echtzeit (Sekunden)Stunden bis TageNur bei erster AnmeldungGeplant (Minuten bis Stunden)
DeprovisionierungsgeschwindigkeitNahezu Echtzeit (Sekunden)Stunden bis Tage (wenn erinnert)Nie (keine Deprovisionierung)Nächster Sync-Zyklus
Waisenkonto-RisikoNiedrig (automatische Deprovisionierung)Hoch (menschlicher Fehler)Hoch (keine Deprovisionierung)Mittel
StandardisierungRFC 7643/7644 (universal)Proprietär pro AppProprietär pro IdPLDAP-Protokoll (standardisiert)
ComplianceAusgezeichneter PrüfpfadSchlecht (manuelle Nachverfolgung)Teilweise (kein Deprovisionierungsbeweis)Gut (Sync-Protokolle)

Wann SCIM verwenden

  • Unternehmenskunden mit zentralisiertem Identitätsmanagement (Okta, Azure AD, OneLogin)
  • Compliance-Anforderungen, die automatisierte Deprovisionierung vorschreiben (SOC 2, ISO 27001, HIPAA)
  • Große Benutzerbasen, bei denen manuelle Provisionierung unpraktisch ist
  • Multi-App-Umgebungen, in denen Benutzer konsistenten Zugriff auf viele Dienste benötigen

Wann JIT-Provisionierung ausreicht

  • Kleine Teams, bei denen manuelle Provisionierung handhabbar ist
  • Verbraucherorientierte Apps, bei denen sich Benutzer selbst registrieren
  • Apps, bei denen Deprovisionierung nicht kritisch ist

SCIM und JIT-Provisionierung schließen sich nicht gegenseitig aus. Viele Auris-Tenants verwenden SCIM für Provisionierung und Deprovisionierung (Benutzer-Lebenszyklusverwaltung) und JIT-Provisionierung via SAML/OIDC für den eigentlichen Anmelde-Flow. SCIM stellt sicher, dass der Benutzer existiert und aktiv ist; SSO übernimmt die Authentifizierung.

Sicherheitsüberlegungen

Bearer-Token-Verwaltung

SCIM-Bearer-Tokens sind langlebige Geheimnisse, die vollen Provisionierungszugriff gewähren. Behandle sie mit der gleichen Sorgfalt wie Datenbankzugangsdaten.

PraxisBeschreibung
Regelmäßig rotierenVierteljährlich ein neues Token generieren und die IdP-Konfiguration aktualisieren
Sicher speichernSCIM-Tokens niemals in Quellcode oder Logs committen
Nutzung überwachenAuris protokolliert jede SCIM-Operation mit der Verbindungs-ID
Umfang begrenzenJede SCIM-Verbindung ist auf einen Tenant beschränkt

IP-Allowlisting

Für maximale Sicherheit den SCIM-Endpunktzugriff auf die Quell-IP-Bereiche deines IdP mithilfe von Auris-IP-Regeln einschränken:

IP-Regel: ALLOW CIDR: 100.25.0.0/16 Bezeichnung: "Okta US East" IP-Regel: ALLOW CIDR: 100.26.0.0/16 Bezeichnung: "Okta US West" IP-Regel: BLOCK CIDR: 0.0.0.0/0 Bezeichnung: "Alle anderen SCIM-Zugriffe blockieren"

Audit-Protokollierung

Jede SCIM-Operation wird im Auris-Audit-Log protokolliert mit:

  • Die SCIM-Verbindungs-ID
  • Die HTTP-Methode und der Pfad
  • Die externalId und userName des Zielbenutzers
  • Das Operationsergebnis (Erfolg/Fehler)
  • Die Quell-IP-Adresse
  • Ein Zeitstempel

Verwandte Konzepte