멤버의 진단 정보 조회
GET /v1/organizations/{org_id}/memberships/{membership_id}/diagnostics · 권한 organizations:read 및 users:read
조직 관리자가 "이 멤버가 왜 로그인할 수 없는가?"라는 질문에 하나의 응답으로 답할 수 있도록 합니다. 응답에는 멤버십, 조직 정책 요약, 대기 중인 초대, 멤버 인증기 요약, 조직 맥락에서의 로그인 상태, 멤버의 디렉터리 그룹, 그리고 애플리케이션 접근 권한이 포함됩니다. 이 엔드포인트는 읽기 전용입니다. 아무것도 변경되지 않으며, 쓰기 작업은 각각의 엔드포인트에서 수행합니다. 로그인 활동은 사용자 로그 조회와 org_id를 통해 조회합니다.
응답에는 조직에 속한 데이터만 포함됩니다. 라벨, AAGUID, IP 주소, 사용자 에이전트, 이메일 주소, CIDR 범위와 다른 조직 맥락의 기록은 응답에 포함되지 않습니다.
요청
| 필드 | 유형 | 필수 | 설명 |
|---|---|---|---|
org_id |
path | 예 | 조직 ID(org_…)입니다. |
membership_id |
path | 예 | 멤버십 ID(mem_…)입니다. |
요청 본문은 없습니다.
응답
다음 필드와 함께 200 OK을(를) 반환합니다.
| 필드 | 설명 |
|---|---|
membership |
멤버십 조회가 반환하는 것과 같은 멤버십입니다. 상태, 출처, 역할 및 정지 사유를 포함합니다. |
policy |
조직에 설정된 정책입니다. authentication_methods(패스키와 비밀번호 허용 여부, 허용된 연결 수), mfa(다중 인증을 사용해야 하는 대상과 허용된 인증 요소), phishing_resistant, sso_enforcement(모드 및 멤버가 비상 접근 목록에 있는 경우 bypass), ip_allowlist(존재 여부와 적용 대상)입니다. null은 조직이 해당 정책에 대해 환경 값을 상속한다는 뜻입니다. |
invitation |
invited 멤버십인 경우에만 해당합니다. 사용자의 기본 이메일 주소로 보낸 대기 중인 초대와 전달 및 전달 상태를 포함합니다. 그 외에는 null입니다. 이메일 주소는 반환되지 않습니다. |
authenticators |
classes: 멤버의 활성 인증기 유형입니다. mfa_enrolled: 활성 인증기 중 역할이 true 또는 second_factor인 인증기가 있을 때 both입니다. |
sign_in |
locked과 locked_until(잠금은 모든 맥락에서 계정의 로그인을 중단합니다), 그리고 이 조직 맥락에서의 마지막 로그인(last_sign_in_at, last_sign_in_amr)입니다. 실패 횟수 카운터는 어떤 조직에도 속하지 않으므로 표시되지 않습니다. |
groups |
조직 디렉터리에서 멤버가 속한 그룹입니다(data: id dsg_… 및 directory_id dir_…, 최대 100개이며, 더 많으면 truncated입니다). 이 사용자와 연결되어 있고 활성 상태인 디렉터리 사용자의 멤버십만 집계됩니다. 그룹 이름은 반환되지 않으며, GET /v1/directories/{directory_id}/groups/{directory_group_id}을(를) 통해 조회합니다. |
applications |
이 조직에서 애플리케이션에 대한 접근 권한입니다. org_access_mode이(가) all_organizations인 애플리케이션은 모든 멤버에게 열려 있으며 개수만 집계됩니다(open_count). 그 외 애플리케이션(data, 이름순, 최대 100개이며, 더 많으면 truncated)에 대해서는 application_id, name, access_mode, allowed을 반환하며, 접근이 거부된 경우 reason도 반환합니다(application_not_enabled: 애플리케이션이 이 조직에 활성화되지 않음, application_not_assigned: 멤버십과 디렉터리 그룹 중 어느 것도 할당되지 않음). 판단은 로그인 시 확인과 동일한 규칙을 따릅니다. |
{
"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
}
}
오류
| HTTP | 코드 | 발생 조건 |
|---|---|---|
| 404 | not_found |
이 조직에 멤버십이 없거나, removed 상태입니다. |
| 401 | unauthenticated |
자격 증명이 없거나, 유효하지 않거나, 취소되었습니다. |
| 403 | insufficient_permissions |
자격 증명에 organizations:read 또는 users:read 권한이 없습니다. |
| 429 | rate_limited |
요청 한도를 초과했습니다. Retry-After 기간이 지난 후 다시 시도하십시오. |
| 503 | service_unavailable |
의존 서비스를 일시적으로 사용할 수 없습니다. Retry-After 기간이 지난 후 다시 시도하십시오. |
예시
curl -i "https://api.eu.keenauth.com/v1/organizations/org_01j9xk3m7q8r2s4t6v8w0y2z4a/memberships/mem_01j9xn5p9s0t4v6w8x0y2z4a6c/diagnostics" \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
개인정보
이 엔드포인트는 개인정보를 다룹니다. 조직 멤버십과 초대 정보, 자격 증명이 포함됩니다. KeenAuth API의 개인정보에서 저장되는 항목, 보관 기간, 삭제 방법을 확인하실 수 있습니다. 어떤 필드에도 민감정보(건강, 생체 정보, 종교, 정치적 견해, 성적 지향)를 보내지 마십시오.