Simula il provisioning SCIM

POST /v1/directories/{directory_id}:simulate · autorizzazione directories:write · solo sviluppo e staging

Esegue uno scenario del simulatore SCIM sull'endpoint SCIM reale della directory. Solo per questa esecuzione, KeenAuth genera un vero token SCIM, lo usa e poi lo revoca. I controlli sul token, i rate limit, il circuit breaker per la deprovisioning di massa e il log del provisioning funzionano esattamente come con il tuo provider di identità. Gli utenti sono un insieme fisso e fittizio: 25 persone con dominio example.test in 5 gruppi. Non contengono dati personali reali.

Il simulatore è uno strumento di sviluppo e modifica la directory. Gli utenti e i gruppi che scrive restano nella directory come qualsiasi altro record provisionato. Usa una directory che hai creato per i test.

Scenario Cosa fa
seed Crea i 25 utenti e i 5 gruppi con le relative appartenenze. In una directory che li contiene già, il primo utente riceve un 409 SCIM e l'esecuzione risulta failed.
bulk_deactivate Invia active=false per il 60% degli utenti (15 su 25). Il circuit breaker scatta solo se mass_deprovision_guard.absolute_min della directory è 15 o meno. Con il valore predefinito di 25 non scatta.
group_churn Sposta un utente da un gruppo a un altro.
attribute_update Modifica il nome visualizzato e il cognome di ogni utente.
conflict_email Crea un utente con uno userName già esistente e si aspetta un 409 uniqueness SCIM.

Se la directory è vuota, ogni scenario diverso da seed esegue prima seed.

Il token di simulazione non viene elencato e non conta nei 2 token validi. Usarlo non avvia la rotazione del token del tuo provider di identità. Per ogni directory può essere in corso una sola esecuzione alla volta. L'esecuzione viene registrata nell'audit come directory.simulation_started e directory.simulation_finished.

Richiesta

Campo Tipo Obbligatorio Descrizione
directory_id path sì ID della directory SCIM (dir_…).
scenario body, stringa sì seed, bulk_deactivate, group_churn, attribute_update o conflict_email.
Idempotency-Key header no Ripropone la prima risposta per una richiesta ritentata; lo scenario non viene eseguito di nuovo.
{"scenario": "bulk_deactivate"}

Risposta

200 OK con il risultato dell'esecuzione. Una risposta di errore SCIM non fa fallire la richiesta. Rende l'esecuzione failed, compila failure e lascia i conteggi a quanto riuscito prima dell'errore. Il risultato contiene solo conteggi e stati: nessun utente, nessun ID SCIM e nessun 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"
}
Campo Descrizione
status completed, oppure failed quando l'endpoint ha risposto con un errore SCIM, l'esecuzione ha impiegato troppo tempo o una risposta non era quella attesa dallo scenario.
users_updated PATCH sugli utenti diversi dalle disattivazioni.
users_deactivated PATCH con active=false accettati dall'endpoint, comprese quelle trattenute.
conflicts Risposte 409 uniqueness attese (conflict_email).
circuit_breaker_tripped Durante l'esecuzione è stato aperto un trattenimento per deprovisioning di massa.
deprovision_hold Il trattenimento aperto della directory dopo l'esecuzione, oppure null. Puoi approvarlo o rifiutarlo con gli endpoint deprovision-holds.
failure null quando completed. Altrimenti reason (scim_error, timeout o unexpected_response), e per scim_error anche scim_status (stato HTTP) e scim_type (scimType SCIM, oppure null).

Errori

HTTP code Quando
400 unknown_field Il body contiene un campo diverso da scenario.
403 test_feature_not_in_production L'ambiente è un ambiente di produzione.
404 not_found La directory non esiste in questo ambiente.
409 conflict È in corso un'altra esecuzione di questa directory, oppure la directory è disattivata o in fase di eliminazione.
422 validation_failed scenario manca o è sconosciuto (/scenario).
422 idempotency_key_reuse La Idempotency-Key è stata usata per una richiesta diversa.
401 unauthenticated La credenziale manca, non è valida o è stata revocata.
403 insufficient_permissions La credenziale non ha l'autorizzazione richiesta.
429 rate_limited È stato superato il rate limit; riprova dopo il periodo indicato in Retry-After.
503 service_unavailable La sincronizzazione della directory o il simulatore non sono disponibili temporaneamente oppure non sono configurati in questo deployment; riprova dopo il periodo indicato in Retry-After.

Esempio

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