Elenca i conflitti di soggetto di una connessione
GET /v1/connections/{connection_id}/subject-conflicts · autorizzazione users:read
Elenca i conflitti di soggetto SSO di un'organizzazione con connessione enterprise (SAML o OIDC), dal più recente.
Un conflitto di soggetto viene registrato quando il provider di identità invia un nuovo soggetto con l'indirizzo email verificato di un utente già collegato alla stessa connessione con un soggetto diverso. Succede, per esempio, quando la casella di un ex dipendente viene assegnata a un nuovo dipendente. KeenAuth non collega automaticamente il nuovo soggetto: l'accesso viene rifiutato con sso_subject_conflict e viene aperto un record perché un amministratore lo risolva.
- Finché un record è aperto, altri accessi con lo stesso soggetto aggiornano quel record invece di aprirne uno nuovo.
- Un record aperto scade 30 giorni dopo l'apertura.
- I record non contengono mai il soggetto esterno né l'indirizzo email.
L'autorizzazione è users:read perché un record riguarda un account utente; per risolverlo serve users:write.
Richiesta
| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
connection_id |
path | sì | ID della connessione (conn_…). |
limit |
query | no | Dimensione della pagina, 1–100 (predefinito 20). |
after / before |
query | no | Cursore da list_metadata. Un cursore funziona solo per la connessione che l'ha prodotto. |
order |
query | no | desc (predefinito) o asc, per data di creazione. |
Risposta
200 OK:
{
"data": [
{
"id": "sscf_01j9xr4a6b8c0d2e4f6g8h0j2k",
"connection_id": "conn_01j9xp6q0r1s5t7v9w1x3y5z7b",
"user_id": "usr_01j9xm2n4p6q8r0s2t4v6w8x0y",
"status": "open",
"resolution": null,
"created_at": "2026-10-28T10:00:00Z",
"last_seen_at": "2026-10-28T10:05:00Z",
"expires_at": "2026-11-27T10:00:00Z",
"closed_at": null
}
],
"list_metadata": { "before": null, "after": null }
}
| Campo | Descrizione |
|---|---|
user_id |
L'utente che possiede l'indirizzo email verificato ed è già collegato a questa connessione con un altro soggetto. |
status |
open (in attesa di una decisione), resolved o expired (chiuso 30 giorni dopo l'apertura, senza una decisione). |
resolution |
same_person o different_person; impostato solo quando status è resolved. |
last_seen_at |
Il tentativo di accesso più recente con il nuovo soggetto. |
closed_at |
Quando il record è stato risolto o è scaduto; null finché è aperto. Un record scaduto può mostrare anche null. |
Errori
| HTTP | code | Quando |
|---|---|---|
| 400 | invalid_cursor |
Il cursore è malformato o appartiene a un'altra connessione o query. |
| 401 | unauthenticated |
La credenziale manca, non è valida o è stata revocata. |
| 403 | insufficient_permissions |
La credenziale non ha users:read. |
| 404 | not_found |
La connessione non esiste in questo ambiente. |
| 422 | validation_failed |
Un parametro di query non è valido (per esempio limit superiore a 100). |
| 429 | rate_limited |
È stato superato il limite di richieste; riprova dopo il periodo indicato in Retry-After. |
| 503 | service_unavailable |
Una dipendenza non è disponibile temporaneamente; riprova dopo il periodo indicato in Retry-After. |
Esempio
curl "https://api.eu.keenauth.com/v1/connections/conn_01j9xp6q0r1s5t7v9w1x3y5z7b/subject-conflicts?limit=20" \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
keenauth connections subject-conflicts list conn_01j9xp6q0r1s5t7v9w1x3y5z7b --limit 20