
# 사용자의 세션 목록 조회

`GET /v1/users/{user_id}/sessions` · 권한 `sessions:read`

사용자의 세션을 한 페이지에 최근 확인 순으로 최대 1,000개까지 나열합니다. 목록에는 `limit`, `after`, `before`, `order`가 없으며, `list_metadata`는 항상 `null` 값입니다. 기본적으로 활성 세션만 반환됩니다. `include_inactive=true`를 지정하면 만료되었거나 취소된 세션(보관 기간 내)도 함께 반환됩니다. 전체 IP 주소가 표시되며, 모든 조회는 관리 감사 로그에 기록됩니다. 쿠키, 토큰, 기기 지문은 절대 반환되지 않습니다.

## 조직 범위

조직 관리자를 위한 멤버 진단 보기를 만들려면 `org_id`를 전달하십시오. 이때 키에는 `organizations:read` 권한도 필요합니다. 이 권한이 없으면 아무것도 읽기 전에 `403 insufficient_permissions`로 요청이 실패합니다. 사용자가 해당 조직의 멤버가 아니면(`invited`, `active`, `suspended` 멤버십이 없음) 알 수 없는 사용자와 동일한 응답인 `404 not_found`로 요청이 실패합니다. 사용자가 멤버이면 해당 조직의 정책에 따라 열린 세션(`org_id`가 해당 조직인 세션)만 반환됩니다. 다른 조직의 맥락이나 어떤 조직에도 속하지 않은 사용자의 세션은 절대 반환되지 않습니다. 이 보기에서 `ip_address`와 `user_agent`는 `null`입니다. `org_id`가 없으면 응답은 변경되지 않습니다.

## 요청

| 매개변수 | 위치 | 필수 | 설명 |
|---|---|---|---|
| `user_id` | 경로 | 예 | 사용자 ID이며, 접두사는 `usr_`입니다. |
| `include_inactive` | 쿼리 | 아니요 | 만료되었거나 취소된 세션도 반환하려면 `true`로 설정합니다. 기본값은 `false`입니다. |
| `org_id` | 쿼리 | 아니요 | 조직 ID이며, 접두사는 `org_`입니다. 보기를 해당 조직으로 제한합니다. [조직 범위](#조직-범위)를 참조하십시오. `organizations:read`가 필요합니다. |

## 응답

`200 OK`. 빈 필드는 `null`입니다.

```json
{
  "data": [
    {
      "id": "ses_0a1b2c3d4e5f6g7h8j9k0m1n2p",
      "user_id": "usr_0a1b2c3d4e5f6g7h8j9k0m1n2p",
      "status": "active",
      "login_host": "login.example.com",
      "auth_time": "2026-02-01T08:00:00Z",
      "acr": "mfa",
      "amr": ["pwd", "otp"],
      "created_at": "2026-02-01T08:00:00Z",
      "last_seen_at": "2026-02-01T09:15:00Z",
      "idle_expires_at": "2026-02-08T09:15:00Z",
      "absolute_expires_at": "2026-03-03T08:00:00Z",
      "org_id": null,
      "ip_address": "203.0.113.10",
      "user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 14_0)",
      "revoked_at": null,
      "revoke_reason": null
    }
  ],
  "list_metadata": {
    "before": null,
    "after": null
  }
}
```

`status`: `active`, `expired`, `revoked` · `acr`: `1fa`, `mfa`, `phr` · `org_id`: 세션이 속한 조직(있는 경우)입니다.

## 오류

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

| HTTP | `code` | 발생 조건 |
|---|---|---|
| 422 | `validation_failed` | `include_inactive`가 `true` 또는 `false`가 아닙니다. |
| 404 | `not_found` | 이 환경에 사용자가 없거나(또는 ID 형식이 잘못됨), `org_id`를 전달했는데 사용자가 해당 조직의 멤버가 아닙니다. |
| 401 | `unauthenticated` | API 키가 없거나 잘못되었거나 취소되었습니다. |
| 403 | `insufficient_permissions` | 키에 `sessions:read` 권한이 없거나, `org_id`를 전달했는데 키에 `organizations:read`가 없습니다. |
| 429 | `rate_limited` | 요청 한도를 초과했습니다. `Retry-After`를 준수하십시오. |
| 503 | `service_unavailable` | 종속 서비스를 일시적으로 사용할 수 없습니다. 나중에 다시 시도하십시오. |

## 예제

```bash
curl "https://api.eu.keenauth.com/v1/users/usr_0a1b2c3d4e5f6g7h8j9k0m1n2p/sessions?include_inactive=true" \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY"
```

CLI: `keenauth users sessions list usr_0a1b2c3d4e5f6g7h8j9k0m1n2p --include-inactive`

## 개인정보

이 엔드포인트는 개인정보를 다룹니다: 세션. [KeenAuth API의 개인정보](/docs/policies/personal-data)에서 저장되는 항목, 보관 기간, 삭제 방법을 설명합니다. 어떤 필드에도 특수 범주의 개인정보(건강, 생체 정보, 종교, 정치적 견해, 성적 지향)를 보내지 마십시오.
