작업 내용 저장
This commit is contained in:
@@ -30,18 +30,6 @@
|
||||
- `GET /auth/tokens`
|
||||
- `POST /auth/tokens`
|
||||
- `DELETE /auth/tokens/{token_id}`
|
||||
- `POST /auth/bots`
|
||||
- `GET /auth/bots`
|
||||
- `GET /auth/bots/{bot_id}`
|
||||
- `POST /auth/bots/{bot_id}/tokens`
|
||||
- `GET /auth/bots/{bot_id}/tokens`
|
||||
- `DELETE /auth/bots/{bot_id}/tokens/{token_id}`
|
||||
- `DELETE /auth/bots/{bot_id}`
|
||||
- `POST /auth/me/bots`
|
||||
- `GET /auth/me/bots`
|
||||
- `POST /auth/me/bots/{bot_id}/tokens`
|
||||
- `GET /auth/me/bots/{bot_id}/tokens`
|
||||
- `DELETE /auth/me/bots/{bot_id}/tokens/{token_id}`
|
||||
|
||||
### 포트폴리오
|
||||
- `GET /portfolios`
|
||||
@@ -463,55 +451,23 @@ curl -X POST "http://localhost:8000/auth/tokens" \
|
||||
-d '{"name": "cli", "permission": "trade-write", "expires_in_days": 30}'
|
||||
```
|
||||
|
||||
#### 봇 주체와 봇 토큰
|
||||
- `POST /auth/bots`: admin only, `CreateBotPrincipalRequest` -> `BotPrincipalResponse`
|
||||
- `GET /auth/bots`: admin only, `is_active` 필터 지원
|
||||
- `GET /auth/bots/{bot_id}`: admin only
|
||||
- `DELETE /auth/bots/{bot_id}`: admin only, bot 비활성화 및 연결 토큰 revoke, 응답 `200`
|
||||
- `POST /auth/bots/{bot_id}/tokens`: admin only, `CreateBotTokenRequest` -> `IssuedBotTokenResponse`
|
||||
- `GET /auth/bots/{bot_id}/tokens`: admin only, `AuthTokenResponse[]`
|
||||
- `DELETE /auth/bots/{bot_id}/tokens/{token_id}`: admin only, `204`
|
||||
#### 서비스 토큰 관리 (CLI 전용)
|
||||
|
||||
소유권/권한 제약:
|
||||
서비스 토큰은 CLI를 통해서만 발급/폐기한다. HTTP API 경로는 제공하지 않는다.
|
||||
|
||||
- bot principal은 `owner_user_id`를 필수로 가진다.
|
||||
- bot permission은 `read` 또는 `trade-write`만 허용한다.
|
||||
- bot 토큰 인증 컨텍스트의 실효 `user_id`는 bot owner(`owner_user_id`)로 해석된다.
|
||||
|
||||
#### 사용자 전용(Self-service) 봇 관리
|
||||
- `POST /auth/me/bots`: DB-issued `read` 이상 사용자 토큰, `CreateSelfBotPrincipalRequest` -> `BotPrincipalResponse`
|
||||
- `GET /auth/me/bots`: DB-issued `read` 이상 사용자 토큰, 본인 소유 bot 목록
|
||||
- `POST /auth/me/bots/{bot_id}/tokens`: DB-issued `read` 이상 사용자 토큰, `CreateBotTokenRequest` -> `IssuedBotTokenResponse`
|
||||
- `GET /auth/me/bots/{bot_id}/tokens`: DB-issued `read` 이상 사용자 토큰, `AuthTokenResponse[]`
|
||||
- `DELETE /auth/me/bots/{bot_id}/tokens/{token_id}`: DB-issued `read` 이상 사용자 토큰, `204`
|
||||
- `pfhub service-token issue <name> --user <username> [--permission read|trade-write] [--ttl-days N | --no-expiry]`
|
||||
- `pfhub service-token revoke <name> [--force]`
|
||||
|
||||
제약:
|
||||
|
||||
- `/auth/me/bots*` 경로는 요청자 본인 소유 bot(`owner_user_id == auth_context.user_id`)에만 허용된다.
|
||||
- 타 사용자 소유 bot 접근 시 `403`.
|
||||
- 서비스 토큰 이름은 전체 서비스 토큰 내에서 유일하다.
|
||||
- 귀속 사용자(`--user`)가 존재하지 않으면 발급 실패이다.
|
||||
|
||||
대표 요청:
|
||||
대표 실행:
|
||||
|
||||
```bash
|
||||
curl -X POST "http://localhost:8000/auth/bots" \
|
||||
-H "Authorization: Bearer <ADMIN_TOKEN>" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"name": "rebalance-bot", "owner_user_id": "user-1", "permission": "trade-write", "description": "nightly jobs"}'
|
||||
|
||||
curl -X POST "http://localhost:8000/auth/bots/bot-1/tokens" \
|
||||
-H "Authorization: Bearer <ADMIN_TOKEN>" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"name": "nightly", "permission": "trade-write", "expires_in_days": 90}'
|
||||
|
||||
curl -X POST "http://localhost:8000/auth/me/bots" \
|
||||
-H "Authorization: Bearer <USER_TOKEN>" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"name": "my-bot", "permission": "read", "description": "personal automation"}'
|
||||
|
||||
curl -X POST "http://localhost:8000/auth/me/bots/bot-1/tokens" \
|
||||
-H "Authorization: Bearer <USER_TOKEN>" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"name": "personal-key", "permission": "read", "expires_in_days": 30}'
|
||||
pfhub service-token issue nightly --user alice --permission trade-write --ttl-days 365
|
||||
pfhub service-token revoke nightly --force
|
||||
```
|
||||
|
||||
### 사용자
|
||||
|
||||
Reference in New Issue
Block a user