Files
Starlight_Lancher/.agents/skills/lark-apps/references/lark-apps-openapi-key.md

80 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# apps openapi-key 命令族 SOP
管理妙搭应用对外暴露的 HTTP API Key`/openapi/**` 鉴权凭证)。全部操作需 `--as user`AuthType: user`--help` 是参数细节的完整来源;本文件只记录 Agent 不看就会做错的领域规则。
## 命令路由
| 命令 | 用途 |
|---|---|
| `+openapi-key-list` | 列出应用所有 API Key脱敏 |
| `+openapi-key-get` | 查看单个 Key 详情(脱敏) |
| `+openapi-key-create` | 创建新 Key**原始密钥一次性可见** |
| `+openapi-key-update` | 改名或改 config不改 status |
| `+openapi-key-enable` | 启用 Keystatus→1 |
| `+openapi-key-disable` | 停用 Keystatus→0**泄露/疑似泄露优先用这个而非 delete** |
| `+openapi-key-delete` | 永久删除 Key不可逆 |
| `+openapi-key-reset` | 轮换密钥(刷新原始 Key**一次性可见** |
## 脱敏口径(安全关键)
- `list` / `get` / `update` / `enable` / `disable`:返回结构里 **无** `api_key` 字段,只有 `key_preview`(格式:`****` + 原始密钥末 4 位,如 `****5f4a`)。
- `create` / `reset`**仅** 在 `data.api_key`(顶层)返回原始密钥一次;同时在 stderr 打印一次性提示:
```
warning: this api_key is shown only once and is NOT stored by lark-cli — copy it now and store it in your own secret manager.
```
- 原始密钥绝不写入 cache / config / recent / debug log / 错误信息。
## 一次性密钥语义
CLI 不保存原始密钥。密钥在 `create` / `reset` 时仅随响应返回一次。**密钥丢失不能用 `get` 找回**——唯一恢复方式是 `+openapi-key-reset` 重新生成新密钥(旧密钥同时失效)。
## scope 结构与 CLI 表达
后端 `config.request_scope` 的真实结构(**snake_case**——Lark 开放网关 `/open-apis/` 对外契约约定;`api_key.thrift` 的 camelCase go.tag 是内部表示OGW 已转成 snake_case
```json
{
"allow_all": true,
"http_infos": [
{ "http_method": "GET", "http_path": "/openapi/some-path" }
]
}
```
- `allow_all=true`:放开该应用所有 `/openapi/**` 路由;`http_infos` 此时忽略。
- `allow_all=false`:按 `http_infos` 逐条授权,每条需 `http_method`(大写)+ `http_path``/openapi/` 开头)。
CLI 提供三种互斥的 scope 表达方式:
| flag | 用途 | 备注 |
|---|---|---|
| `--scope-all` | `allow_all=true`,放开所有路由 | bool flag显式传 `--scope-all=false` 也算"已设置" |
| `--scope-api 'METHOD /openapi/path'` | 逐条授权一个路由,可重复 | 路由从应用 `docs/openapi.json` 取 |
| `--scope '<raw request_scope JSON>'` | 高级逃生口,直传 request_scope JSONsnake_case | CLI 只校验合法 JSON`--scope` 与 `--scope-all`/`--scope-api` 互斥 |
### scope 值来源
妙搭应用的 `/openapi/**` 路由定义在应用仓库,并同步维护在 `docs/openapi.json``paths` 下每个 `"/openapi/..."` 条目 + HTTP 方法)。要授权哪些路由,读目标应用自己的 `docs/openapi.json`,取 `(method, path)` 对。CLI 本身不提供 API 路由发现功能P1 规划中)。
## 高风险操作
`delete` 和 `reset` 是高风险(`high-risk-write`),有以下约束:
- 需显式传 `--yes`(框架 `cmdutil.RequireConfirmation`);缺少时退出码 10**不要自动补 `--yes`**(遵循 lark-shared 安全红线)。
- 支持 `--dry-run` 查看将要执行的 HTTP 请求(不含密钥);不确定时先 dry-run。
- **泄露场景**:应优先 `+openapi-key-disable` 立即停用,而非 `+openapi-key-delete`——停用可随时 enable 恢复delete 不可逆。
## 典型决策场景
| 用户意图 | 正确操作 |
|---|---|
| "key 泄露了,先停掉" | `+openapi-key-disable`(不是 delete |
| "key 丢了/忘了,再给我一个" | `+openapi-key-reset`(不是 create 新 keyreset 轮换密钥、保留原 key 配置) |
| "我的 key 密钥是什么" | 解释list/get 不回显原始密钥,只能用 `+openapi-key-reset` 轮换 |
| "给应用创建一个有权限限制的 key" | `+openapi-key-create --name ... --scope-api 'GET /openapi/...'`(路由取自应用 `docs/openapi.json` |
## 不在本 skill 范围
- OpenAPI spec 全量导出、实时日志 tail、Webhook 消费、多鉴权方式:本期不支持。
- 身份选择、权限不足处理(`missing_scopes`→`console_url`、exit-10 审批、通用"禁输出密钥"红线、高风险操作通用框架:见 [`../../lark-shared/SKILL.md`](../../lark-shared/SKILL.md),不在此重复。