Skip to content

设备授权 devices

面向桌面工作台与 magic-stack CLI 的设备授权接口。

Token 模型

Token有效期用途
access JWT24hdevice/scope:"magic-stack" claim,CLI 凭此放行
refresh token90dopaque 字符串,服务端只存 SHA-256,明文仅返回一次

POST /api/devices/register

注册(或更新)本机设备,领取 access token + refresh token。

(userId, 设备指纹) upsert 设备记录。同一设备多次注册不会重复创建, 只会刷新 token。

鉴权:需 Authorization: Bearer <JWT>(用户登录态)

请求体(JSON)

字段类型说明
fingerprintstring设备指纹(sha256(device_uuid)
namestring设备名称(如主机名)

响应 200

json
{
  "accessToken": "<JWT, 24h>",
  "refreshToken": "<opaque, 90d>",
  "expiresIn": 86400
}

GET /api/devices

列出当前用户已注册的所有设备。

鉴权:需 Authorization: Bearer <JWT>

响应 200

json
{
  "devices": [
    { "id": "...", "name": "...", "fingerprint": "...", "revokedAt": null, "lastSeen": "..." }
  ]
}

DELETE /api/devices/:id

主动吊销某台设备(自助管理)。

鉴权:需 Authorization: Bearer <JWT>(只能吊销本账号的设备)

响应 200

json
{ "ok": true }

POST /api/cli/refresh

用 refresh token 续期,不走 JWT 鉴权。轮换返回新的 access token + refresh token(旧 refresh token 作废)。

限流:60 秒内同 IP 最多 30 次。

请求体(JSON)

字段类型说明
refresh_tokenstring当前有效的 refresh token

响应 200

json
{
  "access_token": "<JWT, 24h>",
  "refresh_token": "<新 opaque token, 90d>",
  "expires_in": 86400
}

重用检测:旧 token 在 60s 宽限窗外再次出现 → 判定为 token 泄露,自动吊销设备, 返回 401 device_revoked

账号停用:若账号 dev_enabled=false,返回 403 dev_disabled

错误码含义见 错误码