
# CLI용 관리 토큰 생성

`POST https://api.keenauth.com/v1/environments/{environment_id}/management-tokens` · `keenauth login`이 호출

CLI의 로그인을 환경 하나에 대한 10분짜리 토큰으로 교환합니다. 이 엔드포인트를 직접 호출할 필요는 없습니다. `keenauth login`이 대시보드 계정으로 로그인시키며(기기 인증, 또는 `--web`을 사용하면 PKCE를 쓰는 루프백 리디렉션), CLI는 작업하는 환경마다 토큰을 요청합니다. 토큰은 CLI의 키(DPoP)에 묶이며, 해당 환경에서 대시보드 역할이 가진 권한만 담습니다.

## 요청

헤더:

| 헤더 | 필수 | 설명 |
| --- | --- | --- |
| `Authorization` | 예 | `DPoP <access token>`: 로그인할 때 CLI가 받은 액세스 토큰입니다. |
| `DPoP` | 예 | 이 요청에 대한 DPoP 증명입니다. 액세스 토큰이 묶인 키로 서명되며, 액세스 토큰의 해시와 서버 nonce를 담습니다. |
| `Content-Type` | 예 | `application/json`. |

본문: 빈 JSON 객체 `{}`입니다. 다른 멤버는 `unknown_field`로 거부됩니다. 이 요청에는 `Idempotency-Key`가 없습니다. 호출할 때마다 새 토큰이 발급됩니다.

## 응답

`Cache-Control: no-store`와 함께 `201 Created`:

| 필드 | 설명 |
| --- | --- |
| `access_token` | 관리 토큰입니다. 같은 키의 증명과 함께 `Authorization: DPoP <token>`으로 보내십시오. |
| `token_type` | 항상 `DPoP`입니다. |
| `expires_in` | 수명(초): `600`. |
| `expires_at` | 수명이 끝나는 시각(RFC 3339, UTC). |
| `environment_id` | 토큰이 속한 환경입니다. |
| `audience` | 토큰이 대상으로 하는 셀(`<region>/<cell>`)입니다. |
| `api_base` | 토큰을 받는 지역 API의 기본 URL입니다. |
| `permissions` | 대시보드 역할의 환경 권한입니다. |

CLI는 토큰을 메모리에만 보관합니다. 역할 변경은 최대 10분 안에 적용되며, 역할이 제거되면 해당 사용자의 열린 토큰은 취소됩니다.

## 오류

| 상태 | 코드 | 발생 시점 |
| --- | --- | --- |
| 401 | `unauthenticated` | 액세스 토큰이 전송되지 않았습니다. |
| 401 | `invalid_token` | 액세스 토큰이 잘못되었거나, 만료되었거나, CLI의 토큰이 아닙니다. `keenauth login`으로 다시 로그인하십시오. |
| 401 | `invalid_dpop_proof` | DPoP 증명이 없거나, 중복되었거나, 요청 또는 토큰의 키와 일치하지 않습니다. |
| 401 | `use_dpop_nonce` | `DPoP-Nonce` 응답 헤더의 nonce를 담은 증명으로 다시 시도하십시오. |
| 401 | `insufficient_user_authentication` | 다중 인증이 필요합니다(역할에 따라 패스키 또는 보안 키가 필요할 수도 있습니다). 다시 로그인하십시오. |
| 404 | `not_found` | 환경이 없거나, 해당 환경에 대시보드 역할이 없습니다. |
| 429 | `rate_limited` | 사용자당 분당 30개를 넘는 토큰 요청입니다(대시보드와 공유). `Retry-After`를 기다리십시오. |

## 예제

```bash
curl -X POST https://api.keenauth.com/v1/environments/env_01jb0000000000000000000000/management-tokens \
  -H "Authorization: DPoP $ACCESS_TOKEN" \
  -H "DPoP: $DPOP_PROOF" \
  -H "Content-Type: application/json" \
  -d '{}'
```
