
# 사용자의 세션 취소

`POST /v1/users/{user_id}/sessions:revoke` · 권한 `sessions:write`

사용자의 세션과 그 세션에 묶인 refresh token 패밀리를 취소합니다. 이 세션들이 발급한 액세스 토큰은 introspection과 취소 확인에서 더 이상 수락되지 않습니다. 본문이 없거나 `{}`이면 사용자의 모든 세션이 취소됩니다. 필터는 최대 하나만 지정할 수 있습니다:

- `session_id`: 해당 세션만 취소합니다(사용자의 세션이어야 하며, 아니면 `404`).
- `org_id`: 해당 조직의 컨텍스트에서 열린 세션과, 그 조직에 대한 사용자의 refresh token 패밀리.
- `client_id`: 이 사용자에 대해 해당 애플리케이션의 refresh token 패밀리만 취소하며, 세션은 열린 상태로 유지됩니다. 애플리케이션 ID(`app_…`)를 사용하세요. Client ID Metadata Document 애플리케이션의 URL 형식 `client_id`는 허용되지 않습니다.

이미 취소되었거나 만료된 세션은 집계되지 않으므로, 같은 호출을 반복해도 개수 0으로 성공합니다. 모든 취소는 관리 감사 로그에 기록됩니다. 재시도를 안전하게 하려면 `Idempotency-Key` 헤더를 보내세요.

## 요청

| 매개변수 | 위치 | 필수 | 설명 |
|---|---|---|---|
| `user_id` | path | 예 | 사용자 ID, `usr_` 접두사가 붙습니다. |

선택 사항인 본문(필드는 최대 하나):

| 필드 | 유형 | 필수 | 설명 |
|---|---|---|---|
| `session_id` | 문자열 | 아니요 | 세션 ID, `ses_` 접두사가 붙습니다. |
| `org_id` | 문자열 | 아니요 | 조직 ID, `org_` 접두사가 붙습니다. |
| `client_id` | 문자열 | 아니요 | 애플리케이션 ID, `app_` 접두사가 붙습니다. |

## 응답

`200 OK`.

```json
{
  "revoked_sessions": 2,
  "revoked_token_families": 3
}
```

`client_id`를 사용하면 `revoked_sessions`는 `0`입니다(세션은 열린 상태로 유지됩니다).

## 오류

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

| HTTP | `code` | 언제 |
|---|---|---|
| 400 | `malformed_request`, `unknown_field` | 본문이 올바른 JSON이 아니거나 알 수 없는 필드가 있습니다. |
| 415 | `unsupported_media_type` | `Content-Type: application/json` 없이 본문을 보냈습니다. |
| 422 | `validation_failed` | 필터가 둘 이상입니다(`mutually_exclusive`). 또는 ID 형식이 잘못되었습니다(`invalid_value`). 또는 조직이나 애플리케이션이 이 환경에 없습니다(`/org_id` 또는 `/client_id`의 `not_found`). |
| 404 | `not_found` | 사용자가 이 환경에 없거나, `session_id`가 이 사용자의 세션이 아닙니다. |
| 401 | `unauthenticated` | API 키가 없거나, 잘못되었거나, 취소되었습니다. |
| 403 | `insufficient_permissions` | 키에 `sessions:write` 권한이 없습니다. |
| 429 | `rate_limited` | 요청 한도를 초과했습니다. `Retry-After`를 준수하세요. |
| 503 | `service_unavailable` | 종속 서비스를 일시적으로 사용할 수 없습니다. 나중에 다시 시도하세요. |

## 예제

```bash
curl -X POST https://api.eu.keenauth.com/v1/users/usr_0a1b2c3d4e5f6g7h8j9k0m1n2p/sessions:revoke \
  -H "Authorization: Bearer $KEENAUTH_SECRET_KEY" \
  -H "Idempotency-Key: $(uuidgen)" \
  -H "Content-Type: application/json" \
  -d '{"org_id": "org_0a1b2c3d4e5f6g7h8j9k0m1n2p"}'
```

CLI: `keenauth users sessions revoke usr_0a1b2c3d4e5f6g7h8j9k0m1n2p --org-id org_0a1b2c3d4e5f6g7h8j9k0m1n2p --yes`
