Recupera la diagnostica di un membro

GET /v1/organizations/{org_id}/memberships/{membership_id}/diagnostics · permessi organizations:read e users:read

Risponde alla domanda "perché questo membro non riesce ad accedere?" per un amministratore dell'organizzazione in un'unica risposta: l'appartenenza, un riepilogo delle policy dell'organizzazione, un invito in sospeso, un riepilogo degli autenticatori del membro, lo stato di accesso nel contesto dell'organizzazione, i gruppi di directory del membro e l'accesso del membro alle applicazioni. È di sola lettura: non cambia nulla, e le azioni di scrittura usano i rispettivi endpoint. L'attività di accesso si legge con Elenca i log di un utente e org_id.

Vengono restituiti solo i dati che appartengono all'organizzazione. Etichette, AAGUID, indirizzi IP, agenti utente, indirizzi email, intervalli CIDR e record del contesto di un'altra organizzazione non fanno mai parte della risposta.

Richiesta

Campo Tipo Obbligatorio Descrizione
org_id path sì ID dell'organizzazione (org_…).
membership_id path sì ID dell'appartenenza (mem_…).

Nessun corpo della richiesta.

Risposta

200 OK con questi campi:

Campo Descrizione
membership L'appartenenza come la restituisce Recupera un'appartenenza: stato, origine, ruoli e motivo della sospensione.
policy Le policy definite sull'organizzazione: authentication_methods (passkey e password consentite, numero di connessioni consentite), mfa (chi deve usare la MFA e i fattori consentiti), phishing_resistant, sso_enforcement (modalità, e bypass quando il membro è nell'elenco break-glass) e ip_allowlist (presente, e a chi si applica). null indica che l'organizzazione eredita il valore dell'ambiente per quella policy.
invitation Solo per un'appartenenza invited: l'invito in sospeso all'indirizzo email primario dell'utente, con la sua consegna e lo stato di consegna. null altrimenti. L'indirizzo email non viene restituito.
authenticators classes: i tipi degli autenticatori attivi del membro. mfa_enrolled: true quando un autenticatore attivo ha il ruolo second_factor o both.
sign_in locked e locked_until (un blocco interrompe l'accesso dell'account in ogni contesto), e l'ultimo accesso nel contesto di questa organizzazione (last_sign_in_at, last_sign_in_amr). I contatori dei fallimenti non vengono mostrati, perché non appartengono a nessuna organizzazione.
groups I gruppi del membro nelle directory dell'organizzazione (data: id dsg_… e directory_id dir_…; al massimo 100, truncated quando sono di più). Contano solo le appartenenze di un utente di directory collegato a questo utente e attivo. I nomi dei gruppi non vengono restituiti; leggili con GET /v1/directories/{directory_id}/groups/{directory_group_id}.
applications L'accesso alle applicazioni in questa organizzazione. Le applicazioni la cui org_access_mode è all_organizations sono aperte a ogni membro e vengono solo conteggiate (open_count). Per le altre applicazioni (data, per nome, al massimo 100, truncated quando sono di più): application_id, name, access_mode, allowed, e reason quando l'accesso è negato (application_not_enabled: l'applicazione non è abilitata per l'organizzazione; application_not_assigned: né l'appartenenza né uno dei suoi gruppi di directory è assegnato). La decisione segue la stessa regola del controllo in fase di accesso.
{
  "membership": {
    "id": "mem_01j9xn5p9s0t4v6w8x0y2z4a6c",
    "organization_id": "org_01j9xk3m7q8r2s4t6v8w0y2z4a",
    "user_id": "usr_01j9xh2k6p7q1r3s5t7v9w1x3y",
    "status": "suspended",
    "source": "scim",
    "reason": "scim_deprovisioned",
    "roles": [],
    "expires_at": null,
    "created_at": "2026-10-12T09:31:00.123456Z",
    "activated_at": "2026-10-12T09:31:00.123456Z",
    "suspended_at": "2026-10-20T07:00:00Z",
    "removed_at": null,
    "updated_at": "2026-10-20T07:00:00Z",
    "version": 3
  },
  "policy": {
    "authentication_methods": null,
    "mfa": { "required_for": "all", "allowed_factors": ["totp", "webauthn"] },
    "phishing_resistant": null,
    "sso_enforcement": { "mode": "org_context", "bypass": false },
    "ip_allowlist": null
  },
  "invitation": null,
  "authenticators": { "mfa_enrolled": false, "classes": ["webauthn"] },
  "sign_in": {
    "locked": false,
    "locked_until": null,
    "last_sign_in_at": "2026-10-19T08:15:42Z",
    "last_sign_in_amr": ["fed"]
  },
  "groups": {
    "data": [{ "id": "dsg_01j9xp4r8s2t4v6w8x0y2z4a6b", "directory_id": "dir_01j9xm1n5p7q9r1s3t5v7w9x1y" }],
    "truncated": false
  },
  "applications": {
    "open_count": 2,
    "data": [
      {
        "application_id": "app_01j9xq6s0t2v4w6x8y0z2a4b6c",
        "name": "Finance portal",
        "access_mode": "assigned_only",
        "allowed": false,
        "reason": "application_not_assigned"
      }
    ],
    "truncated": false
  }
}

Errori

HTTP codice Quando
404 not_found L'appartenenza non esiste in questa organizzazione, oppure è removed.
401 unauthenticated La credenziale manca, non è valida o è stata revocata.
403 insufficient_permissions La credenziale non ha organizations:read o users:read.
429 rate_limited È stato superato il limite di richieste; riprova dopo il periodo Retry-After.
503 service_unavailable Una dipendenza non è temporaneamente disponibile; riprova dopo il periodo Retry-After.

Esempio

curl -i "https://api.eu.keenauth.com/v1/organizations/org_01j9xk3m7q8r2s4t6v8w0y2z4a/memberships/mem_01j9xn5p9s0t4v6w8x0y2z4a6c/diagnostics" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"

Dati personali

Questo endpoint contiene dati personali: appartenenze e inviti all'organizzazione, e credenziali. Dati personali nelle API di KeenAuth descrive cosa viene memorizzato, per quanto tempo viene conservato e come viene cancellato. Non inviare categorie particolari di dati personali (salute, dati biometrici, religione, opinioni politiche, orientamento sessuale) in nessun campo.