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:
| Problem | Auswirkung |
|---|---|
| Onboarding-Verzögerung | Neue Mitarbeiter warten Stunden oder Tage auf die Kontoerstellung |
| Offboarding-Lücken | Ehemalige Mitarbeiter behalten Zugriff auf Systeme, weil jemand vergessen hat, sie zu deprovisionieren |
| Verwaiste Konten | Konten, die niemandem gehören, häufen sich über die Zeit an |
| Attribut-Drift | Abteilung, Titel oder Manager eines Benutzers ändert sich in HR, aber nicht in nachgelagerten Systemen |
| Compliance-Risiko | Prü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-Belastung | Provisionierung 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"
}
}| Attribut | SCIM-Typ | Beschreibung |
|---|---|---|
id | String | Auris-zugewiesener eindeutiger Bezeichner (schreibgeschützt) |
externalId | String | IdP-zugewiesener Bezeichner (für Korrelation verwendet) |
userName | String | Eindeutiger Anmeldename (typischerweise E-Mail) |
name.givenName | String | Vorname |
name.familyName | String | Nachname |
emails | Mehrwertig | E-Mail-Adressen (primäre markiert) |
displayName | String | Menschenlesbarer vollständiger Name |
active | Boolean | Konto-Aktiviert/Deaktiviert-Status |
title | String | Berufsbezeichnung |
department | String | Abteilungsname |
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_hierBenutzer auflisten
GET /scim/v2/Users?filter=userName eq "[email protected]"&startIndex=1&count=10
Authorization: Bearer scim_token_hierAntwort: 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_hierAntwort: 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
| Operator | Bedeutung | Beispiel |
|---|---|---|
eq | Gleich | userName eq "[email protected]" |
ne | Ungleich | active ne false |
co | Enthält | userName co "jane" |
sw | Beginnt mit | userName sw "jane" |
ew | Endet mit | emails.value ew "@company.com" |
pr | Vorhanden (hat Wert) | title pr |
gt | Größer als | meta.lastModified gt "2025-01-01T00:00:00Z" |
lt | Kleiner als | meta.created lt "2025-06-01T00:00:00Z" |
ge | Größer als oder gleich | meta.lastModified ge "2025-01-01" |
le | Kleiner als oder gleich | meta.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):
| Parameter | Beschreibung | Standard |
|---|---|---|
startIndex | 1-basierter Index des ersten zurückzugebenden Ergebnisses | 1 |
count | Maximale Anzahl von Ergebnissen pro Seite | 100 |
totalResults | Gesamtzahl der übereinstimmenden Ressourcen (in Antwort zurückgegeben) | — |
itemsPerPage | Tatsä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ßnahme | Beschreibung |
|---|---|
| Token-Hashing | Tokens werden als SHA-256-Hashes gespeichert, nicht im Klartext |
| Tenant-Isolation | Jedes Token ist an einen bestimmten Tenant gebunden |
| Audit-Protokollierung | Jede SCIM-Operation wird mit der Verbindungs-ID protokolliert |
| IP-Allowlisting | Optional: 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:
- Auris-Datenbank: Erstellt einen
TenantUser-Datensatz mitscimExternalId(dem Bezeichner des IdP) undscimUserName(dem Benutzernamen des IdP) - 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
| Dimension | SCIM 2.0 | Manuelle Provisionierung | JIT-Provisionierung | LDAP-Sync |
|---|---|---|---|---|
| Provisionierungsgeschwindigkeit | Nahezu Echtzeit (Sekunden) | Stunden bis Tage | Nur bei erster Anmeldung | Geplant (Minuten bis Stunden) |
| Deprovisionierungsgeschwindigkeit | Nahezu Echtzeit (Sekunden) | Stunden bis Tage (wenn erinnert) | Nie (keine Deprovisionierung) | Nächster Sync-Zyklus |
| Waisenkonto-Risiko | Niedrig (automatische Deprovisionierung) | Hoch (menschlicher Fehler) | Hoch (keine Deprovisionierung) | Mittel |
| Standardisierung | RFC 7643/7644 (universal) | Proprietär pro App | Proprietär pro IdP | LDAP-Protokoll (standardisiert) |
| Compliance | Ausgezeichneter Prüfpfad | Schlecht (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.
| Praxis | Beschreibung |
|---|---|
| Regelmäßig rotieren | Vierteljährlich ein neues Token generieren und die IdP-Konfiguration aktualisieren |
| Sicher speichern | SCIM-Tokens niemals in Quellcode oder Logs committen |
| Nutzung überwachen | Auris protokolliert jede SCIM-Operation mit der Verbindungs-ID |
| Umfang begrenzen | Jede 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
externalIdunduserNamedes Zielbenutzers - Das Operationsergebnis (Erfolg/Fehler)
- Die Quell-IP-Adresse
- Ein Zeitstempel
Verwandte Konzepte
- Multi-Tenancy — Wie Tenant-Isolation auf SCIM-Verbindungen und provisionierte Benutzer angewendet wird
- Gehostetes Login (Universal Login) — Der Anmelde-Flow, durch den SCIM-provisionierte Benutzer sich authentifizieren
- OAuth 2.0 & OIDC — Das Authentifizierungsprotokoll, das nach SCIM den Benutzer provisioniert
- Adaptives MFA & Risikobewertung — Sicherheitsrichtlinien, die bei der Anmeldung auf SCIM-provisionierte Benutzer angewendet werden
- Sitzungen & Token-Rotation — Sitzungsverwaltung für provisionierte Benutzer