사용자의 로그인 상태 조회

GET /v1/users/{user_id}/sign-in-state · 권한 users:read

사용자가 로그인할 수 없을 때 지원팀이 필요로 하는 정보를 반환합니다. 여기에는 사용자의 열린 계정 잠금, 각 로그인 경로에서 아직 진행 중인 실패 횟수, 그리고 마지막 인증 성공 정보가 포함됩니다. 이 호출은 읽기만 수행합니다. 아무것도 변경되지 않으며 감사 기록도 남지 않습니다. 잠금을 해제하려면 POST /v1/users/{user_id}:unlock을 사용하십시오.

응답에는 카운터의 내부 주체, 이메일 주소, IP 주소, 기기 또는 세션 ID가 포함되지 않습니다. 사용자의 세션을 확인하려면 GET /v1/users/{user_id}/sessions를 사용하십시오.

조직 범위

조직 관리자를 위한 멤버 진단 화면을 구성하려면 org_id를 전달하십시오. 이때 키에는 organizations:read 권한도 필요합니다. 이 권한이 없으면 아무것도 읽기 전에 403 insufficient_permissions로 요청이 실패합니다. 사용자가 해당 조직의 멤버가 아니라면(invited, active, suspended 멤버십이 없는 경우) 존재하지 않는 사용자에 대한 응답과 동일한 404 not_found로 요청이 실패합니다. 사용자가 멤버인 경우 last_sign_in은 해당 조직 맥락의 세션에서만 가져오며, failures는 실패 카운터가 어떤 조직에도 속하지 않으므로 항상 빈 배열입니다. 잠금은 모든 맥락에서 계정의 로그인을 차단하므로 여전히 반환됩니다. org_id를 지정하지 않으면 응답은 변경되지 않습니다.

요청

파라미터 위치 필수 설명
user_id path 예 사용자 ID, 접두사 usr_.
org_id query 아니요 조직 ID, 접두사 org_. 보기를 해당 조직으로 제한합니다. 조직 범위를 참고하십시오. organizations:read 권한이 필요합니다.

응답

200 OK.

{
  "locked": true,
  "locked_until": "2026-10-20T10:00:00Z",
  "locks": [
    {"id": "lck_0a1b2c3d4e5f6g7h8j9k0m1n2p", "path": "password",
     "locked_at": "2026-10-20T09:45:00Z", "expires_at": "2026-10-20T10:00:00Z"}
  ],
  "failures": [
    {"path": "totp", "count": 3, "window_ends_at": "2026-10-20T09:55:00Z"}
  ],
  "last_sign_in": {"authenticated_at": "2026-10-19T18:12:04Z", "amr": ["pwd", "otp"], "country": "DE"}
}
필드 설명
locked 하나 이상의 로그인 경로가 잠겨 있으면 true입니다.
locked_until 마지막 열린 잠금이 끝나는 시각입니다. 잠금이 없으면 null입니다.
locks 열린 잠금 목록으로, 오래된 순서이며 경로(password, totp, sms_2fa, email_2fa, otp, recovery_code)당 최대 하나입니다.
failures 마지막 성공 또는 마지막 잠금 이후 경로별 실패 시도 횟수입니다. 집계 기간이 진행되는 동안에만 표시됩니다. window_ends_at 이후에는 횟수가 다시 0부터 시작합니다. 비밀번호 기간은 환경의 brute_force.window_minutes 값입니다.
last_sign_in 아직 보관 중인 세션 가운데 가장 최근의 인증 성공 정보입니다. authenticated_at(같은 세션에서 재인증하면 이 값이 앞으로 갱신됩니다), 인증 방법(amr, RFC 8176), 세션의 마지막으로 알려진 국가(알 수 없으면 null)를 포함합니다. 보관 중인 세션이 없으면 null입니다. 사용자가 한 번도 로그인하지 않았거나 마지막 세션이 30일 넘게 전에 종료된 경우입니다.

오류

모든 오류는 안정적인 code를 포함한 application/problem+json 본문으로 반환됩니다.

HTTP code 발생 조건
404 not_found 이 환경에 사용자가 존재하지 않거나(또는 ID 형식이 잘못된 경우), org_id를 지정했는데 사용자가 해당 조직의 멤버가 아닌 경우입니다.
401 unauthenticated API 키가 없거나, 유효하지 않거나, 취소되었습니다.
403 insufficient_permissions 키에 users:read 권한이 없거나, org_id를 지정했는데 키에 organizations:read 권한이 없습니다.
429 rate_limited 요청 한도를 초과했습니다. Retry-After를 따르십시오.
503 service_unavailable 의존 서비스를 일시적으로 사용할 수 없습니다. 나중에 다시 시도하십시오.

예제

curl https://api.eu.keenauth.com/v1/users/usr_0a1b2c3d4e5f6g7h8j9k0m1n2p/sign-in-state \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"

CLI: keenauth users sign-in-state usr_0a1b2c3d4e5f6g7h8j9k0m1n2p