API reference

Admin · Upload tokens

Issuing, rotating and revoking named upload tokens, and their S3 credentials

Token 列表

GET
/api/admin/tokens

分页,缺省列本人的;管理员可带 user_id 查看指定用户的。只含识别前缀,无哈希无明文。

Authorization

session
cookieimgyoung_session<token>

登录下发的会话 cookie;状态变更请求须另以 X-CSRF-Token 头回传会话绑定的 CSRF 令牌。

Query Parameters

page?integer

页码,从 1 起;缺省 1

Range1 <= value
page_size?integer

每页条数;缺省 20,上限 100

Range1 <= value <= 100
user_id?string

查看指定用户的 Token;仅管理员生效

Response Body

Token 分页

application/json
  1. response
items*array<>
total*integer

过滤后的总条数

Formatint64
curl -X GET 'http://localhost:8721/api/admin/tokens'
{  "items": [    {      "id": 0,      "name": "string",      "prefix": "string",      "scopes": "string",      "expires_at": "string",      "last_used_at": "string",      "revoked_at": "string",      "created_at": "string"    }  ],  "total": 0}

签发 Token

POST
/api/admin/tokens

为当前用户签发具名 Token;明文仅在本响应返回一次。

Authorization

session
cookieimgyoung_session<token>

登录下发的会话 cookie;状态变更请求须另以 X-CSRF-Token 头回传会话绑定的 CSRF 令牌。

Header Parameters

X-CSRF-Token*string

登录或 GET /api/admin/me 响应里的 csrf_token;缺失或不匹配返回 403

Request Body

application/json
  1. body
name*string

用途名,同一用户内唯一

Lengthlength <= 64
expires_in_hours?integer

有效期小时数;缺省或 0 表示永久

Formatint64
Range0 <= value <= 876000

Response Body

新 Token;token 为明文,仅此一次下发

application/json
  1. response
id*integer
Formatint64
name*string
prefix*string
token*string

Token 明文,仅此一次下发

curl -X POST 'http://localhost:8721/api/admin/tokens' \  -H 'X-CSRF-Token: string' \  -H 'Content-Type: application/json' \  -d '{  "name": "string"}'
{  "id": 0,  "name": "string",  "prefix": "string",  "token": "string"}
DELETE
/api/admin/tokens/{id}

本人可删自己的,管理员可删任何人的;仍有效的 Token 返回 409,须先吊销。

Authorization

session
cookieimgyoung_session<token>

登录下发的会话 cookie;状态变更请求须另以 X-CSRF-Token 头回传会话绑定的 CSRF 令牌。

Path Parameters

id*integer

Token 记录 id

Formatint64

Header Parameters

X-CSRF-Token*string

登录或 GET /api/admin/me 响应里的 csrf_token;缺失或不匹配返回 403

Response Body

已删除

curl -X DELETE 'http://localhost:8721/api/admin/tokens/0' \  -H 'X-CSRF-Token: string'
Empty

吊销 Token

POST
/api/admin/tokens/{id}/revoke

本人可吊销自己的,管理员可吊销任何人的;S3 协议面的同一凭证随之失效。

Authorization

session
cookieimgyoung_session<token>

登录下发的会话 cookie;状态变更请求须另以 X-CSRF-Token 头回传会话绑定的 CSRF 令牌。

Path Parameters

id*integer

Token 记录 id

Formatint64

Header Parameters

X-CSRF-Token*string

登录或 GET /api/admin/me 响应里的 csrf_token;缺失或不匹配返回 403

Response Body

已吊销

curl -X POST 'http://localhost:8721/api/admin/tokens/0/revoke' \  -H 'X-CSRF-Token: string'
Empty

轮转 Token

POST
/api/admin/tokens/{id}/rotate

同名新 Token 原子替换旧 Token,新明文仅此一次返回;仅限本人的有效 Token。

Authorization

session
cookieimgyoung_session<token>

登录下发的会话 cookie;状态变更请求须另以 X-CSRF-Token 头回传会话绑定的 CSRF 令牌。

Path Parameters

id*integer

Token 记录 id

Formatint64

Header Parameters

X-CSRF-Token*string

登录或 GET /api/admin/me 响应里的 csrf_token;缺失或不匹配返回 403

Response Body

新 Token;token 为明文,仅此一次下发

application/json
  1. response
id*integer
Formatint64
name*string
prefix*string
token*string

Token 明文,仅此一次下发

curl -X POST 'http://localhost:8721/api/admin/tokens/0/rotate' \  -H 'X-CSRF-Token: string'
{  "id": 0,  "name": "string",  "prefix": "string",  "token": "string"}
POST
/api/admin/tokens/{id}/s3-credential

密钥由主密钥按 Token 派生、不落库,可随时重看;仅限本人的 Token。用 POST 是为了让凭证下发也过 CSRF 闸。

Authorization

session
cookieimgyoung_session<token>

登录下发的会话 cookie;状态变更请求须另以 X-CSRF-Token 头回传会话绑定的 CSRF 令牌。

Path Parameters

id*integer

Token 记录 id

Formatint64

Header Parameters

X-CSRF-Token*string

登录或 GET /api/admin/me 响应里的 csrf_token;缺失或不匹配返回 403

Response Body

S3 凭证与端点

application/json
  1. response

一枚 Token 的 S3 协议凭证与端点配置

access_key_id*string

即 Token 明文前缀

secret_access_key*string

由主密钥派生,可随时重看

endpoint*string

客户端填的 S3 端点,末尾 /s3 是协议面前缀

Formaturi
region*string

本服务不区分区域,给一个客户端普遍接受的值

bucket*string

无桶概念,占位名供客户端填

url_prefix*string

客户端据此拼最终访问地址,含用户 id 段

Formaturi
curl -X POST 'http://localhost:8721/api/admin/tokens/0/s3-credential' \  -H 'X-CSRF-Token: string'
{  "access_key_id": "string",  "secret_access_key": "string",  "endpoint": "http://example.com",  "region": "string",  "bucket": "string",  "url_prefix": "http://example.com"}