SCIM-Provisionierung simulieren
POST /v1/directories/{directory_id}:simulate · Berechtigung directories:write · nur Entwicklung und Staging
Führt ein SCIM-Simulator-Szenario gegen den echten SCIM-Endpunkt des Verzeichnisses aus. Nur für diesen Lauf erstellt KeenAuth ein echtes SCIM-Token, verwendet es und widerruft es anschließend. Token-Prüfungen, Ratenlimits, der Schutzschalter für Massen-Deprovisionierung und das Provisionierungsprotokoll laufen genauso ab wie bei Ihrem Identitätsanbieter. Die Benutzer sind ein festes, fiktives Set: 25 Personen unter example.test in 5 Gruppen. Sie enthalten keine echten personenbezogenen Daten.
Der Simulator ist ein Entwicklungswerkzeug und verändert das Verzeichnis. Die Benutzer und Gruppen, die er schreibt, bleiben wie alle anderen provisionierten Datensätze im Verzeichnis erhalten. Verwenden Sie ein Verzeichnis, das Sie für Tests angelegt haben.
| Szenario | Was es tut |
|---|---|
seed |
Legt die 25 Benutzer und die 5 Gruppen mit ihren Mitgliedschaften an. In einem Verzeichnis, das sie bereits enthält, erhält der erste Benutzer ein SCIM-409, und der Lauf ist failed. |
bulk_deactivate |
Sendet active=false für 60 % der Benutzer (15 von 25). Der Schutzschalter löst nur aus, wenn mass_deprovision_guard.absolute_min des Verzeichnisses 15 oder weniger beträgt. Mit dem Standardwert von 25 löst er nicht aus. |
group_churn |
Verschiebt einen Benutzer von einer Gruppe in eine andere. |
attribute_update |
Ändert den Anzeigenamen und den Nachnamen jedes Benutzers. |
conflict_email |
Legt einen Benutzer mit einem bereits vorhandenen userName an und erwartet ein SCIM-409 uniqueness. |
Wenn das Verzeichnis leer ist, führt jedes Szenario außer seed zuerst seed aus.
Das Simulations-Token wird nie aufgelistet und zählt nicht zu den 2 gültigen Token. Seine Verwendung startet nicht die Rotation des Tokens Ihres Identitätsanbieters. Pro Verzeichnis kann nur ein Lauf gleichzeitig laufen. Der Lauf wird als directory.simulation_started und directory.simulation_finished protokolliert.
Anfrage
| Feld | Typ | Pflicht | Beschreibung |
|---|---|---|---|
directory_id |
Pfad | ja | SCIM-Verzeichnis-ID (dir_…). |
scenario |
Body, string | ja | seed, bulk_deactivate, group_churn, attribute_update oder conflict_email. |
Idempotency-Key |
Header | nein | Wiederholt die erste Antwort bei einer erneuten Anfrage; das Szenario wird nicht erneut ausgeführt. |
{"scenario": "bulk_deactivate"}
Antwort
200 OK mit dem Ergebnis des Laufs. Eine SCIM-Fehlerantwort lässt die Anfrage nicht fehlschlagen. Sie setzt den Lauf auf failed, füllt failure aus und belässt die Zähler bei dem, was vor dem Fehler erfolgreich war. Das Ergebnis enthält nur Zähler und Zustände: keinen Benutzer, keine SCIM-ID und kein Token.
{
"directory_id": "dir_01j9xm2n4p6q8r0s2t4v6w8y0z",
"scenario": "bulk_deactivate",
"status": "completed",
"users_created": 0,
"groups_created": 0,
"users_updated": 0,
"groups_updated": 0,
"users_deactivated": 15,
"conflicts": 0,
"circuit_breaker_tripped": true,
"deprovision_hold": {"id": "0191e9b2-6f3a-7c4d-8e5f-0a1b2c3d4e5f", "pending_count": 6},
"failure": null,
"started_at": "2026-10-28T09:31:00.123456Z",
"completed_at": "2026-10-28T09:31:01.654321Z"
}
| Feld | Beschreibung |
|---|---|
status |
completed, oder failed, wenn der Endpunkt mit einem SCIM-Fehler antwortete, der Lauf zu lange dauerte oder eine Antwort nicht dem entsprach, was das Szenario erwartete. |
users_updated |
Benutzer-PATCHes außer Deaktivierungen. |
users_deactivated |
Vom Endpunkt akzeptierte active=false-PATCHes, einschließlich zurückgehaltener. |
conflicts |
Erwartete 409 uniqueness-Antworten (conflict_email). |
circuit_breaker_tripped |
Während des Laufs wurde eine Sperre für Massen-Deprovisionierung geöffnet. |
deprovision_hold |
Die offene Sperre des Verzeichnisses nach dem Lauf, oder null. Genehmigen oder lehnen Sie sie über die Endpunkte deprovision-holds ab. |
failure |
null bei completed. Andernfalls reason (scim_error, timeout oder unexpected_response) und bei scim_error außerdem scim_status (HTTP-Status) und scim_type (SCIM-scimType oder null). |
Fehler
| HTTP | Code | Wann |
|---|---|---|
| 400 | unknown_field |
Der Body enthält ein anderes Feld als scenario. |
| 403 | test_feature_not_in_production |
Die Umgebung ist eine Produktionsumgebung. |
| 404 | not_found |
Das Verzeichnis existiert in dieser Umgebung nicht. |
| 409 | conflict |
Ein anderer Lauf dieses Verzeichnisses ist in Arbeit, oder das Verzeichnis ist deaktiviert oder wird gelöscht. |
| 422 | validation_failed |
scenario fehlt oder ist unbekannt (/scenario). |
| 422 | idempotency_key_reuse |
Der Idempotency-Key wurde für eine andere Anfrage verwendet. |
| 401 | unauthenticated |
Die Anmeldedaten fehlen, sind ungültig oder widerrufen. |
| 403 | insufficient_permissions |
Die Anmeldedaten haben nicht die erforderliche Berechtigung. |
| 429 | rate_limited |
Das Ratenlimit wurde überschritten; wiederholen Sie die Anfrage nach der Zeitspanne Retry-After. |
| 503 | service_unavailable |
Verzeichnissynchronisierung oder Simulator sind vorübergehend nicht verfügbar oder in dieser Bereitstellung nicht konfiguriert; wiederholen Sie die Anfrage nach der Zeitspanne Retry-After. |
Beispiel
curl -X POST "https://api.eu.keenauth.com/v1/directories/dir_01j9xm2n4p6q8r0s2t4v6w8y0z:simulate" \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
-H "Content-Type: application/json" \
-d '{"scenario": "seed"}'
keenauth directories simulate dir_01j9xm2n4p6q8r0s2t4v6w8y0z --scenario bulk_deactivate