# API 认证

## GraphQL PAT

HTTPS POST /v1/graphql，Content-Type 为 application/json，Authorization 为 Bearer PAT。
请求体为 query、variables 和可选 operationName；有效 token 不能写入 URL 或日志。
公开目录和下载使用 S3/CDN binding，不发送 token、cookie 或管理 header。

## 当前权限

| 能力 | 范围与当前角色 |
| --- | --- |
| 私有读取 / tokens / receipts | plugins:read，并检查资源或回执权限 |
| 创建 / metadata / listing / ownership / lifecycle | plugins:write，并检查 ownership；特殊流程由契约控制 |
| upload / submit_release | releases:write，并检查 ownership |
| review_change | reviews:write，管理员 |
| set_visibility | plugins:write，管理员 |
| 用户角色 / suspend / policy | admin:write，管理员 |
| publication_status | plugins:read，当前owner/admin；跨actor仅管理员 |
| recover_publication | admin:write，当前管理员；原publication、CAS与幂等 |

scope 不扩权；转让、撤销、到期、suspend 都在提交和重放处重新检查。
不允许移除最后一个活动管理员；账号删除不重新开放首次管理员 bootstrap。

## 服务内部边界

BFF service key 不代表用户权限；worker lease/fence 只负责被领取工作。
不要将内部服务凭据提供给浏览器、插件或 Agent。
