계정 잠금 목록 조회
GET /v1/attack-protection/lockouts · 권한 attack-protection:read
환경의 열린 계정 잠금을 오래된 순서로 나열합니다. 무차별 대입 방어는 실패가 너무 많으면 사용자의 로그인 경로 하나(예: password 또는 totp)를 잠급니다. 사용자의 다른 경로는 계속 열려 있습니다. 만료된 잠금은 더 이상 경로를 막지 않으므로 나열되지 않습니다. 목록은 앞으로만 페이지를 넘기며 전체 개수를 반환하지 않습니다. 응답에는 IP 주소와 실패 카운터 키가 포함되지 않습니다.
요청
| 매개변수 | 위치 | 필수 | 설명 |
|---|---|---|---|
limit |
query | 아니요 | 페이지당 항목 수, 1-100(기본값 20). |
after |
query | 아니요 | 이전 페이지의 list_metadata.after에서 받은 커서. |
before와 order=desc는 지원되지 않으며 422를 반환합니다.
응답
200 OK.
{
"data": [
{
"id": "lck_01jaz8m5c3f6t9w2y4b7d0g3k6",
"user_id": "usr_0a1b2c3d4e5f6g7h8j9k0m1n2p",
"path": "password",
"locked_at": "2026-10-20T09:00:00Z",
"expires_at": "2026-10-20T09:15:00Z",
"failure_count": 20
}
],
"list_metadata": {"before": null, "after": null}
}
| 필드 | 설명 |
|---|---|
id |
잠금 ID, lck_ 접두사가 붙습니다. user.unlocked 이벤트에도 같은 ID가 포함됩니다. |
user_id |
잠긴 사용자. |
path |
잠긴 로그인 경로: password, totp, sms_2fa, email_2fa, otp 또는 recovery_code. |
locked_at, expires_at |
잠금이 시작된 시점과 자동으로 해제되는 시점. |
failure_count |
잠금을 일으킨 기간 동안의 실패 시도 횟수. |
오류
모든 오류는 안정적인 code를 포함한 application/problem+json 본문으로 반환됩니다.
| HTTP | code |
언제 |
|---|---|---|
| 400 | invalid_cursor |
커서 형식이 잘못되었거나 다른 목록에 속합니다. |
| 422 | validation_failed |
limit이 범위를 벗어났거나, before 또는 내림차순 order를 보냈습니다. |
| 401 | unauthenticated |
API 키가 없거나, 잘못되었거나, 취소되었습니다. |
| 403 | insufficient_permissions |
키에 attack-protection:read 권한이 없습니다. |
| 429 | rate_limited |
요청 한도를 초과했습니다. Retry-After를 준수하세요. |
| 503 | service_unavailable |
종속 서비스를 일시적으로 사용할 수 없습니다. 나중에 다시 시도하세요. |
예제
curl https://api.eu.keenauth.com/v1/attack-protection/lockouts?limit=50 \
-H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
CLI: keenauth attack-protection lockouts list --limit 50