企业自建设备码授权服务对接 CloudBase CLI
本文说明企业如何使用 CloudBase CLI 与自建授权服务完成具体对接,并基于参考实现落地整套流程。
如果你想先了解设备码授权的背景和协议约定,请先阅读 设备码授权概览。
自建授权服务参考实现仓库:cloudbase-cli-auth-endpoint
1. CloudBase CLI 如何配合这套流程
1.1 配置授权服务地址
企业接入这套流程时,先把授权服务地址写入 CLI 配置。例如:
tcb config set customOAuthEndpoint https://auth.example.com/auth
其中 https://auth.example.com/auth 需要替换为您自行配置的授权服务路径。
然后再执行:
tcb login
这样做的原因是:
- 首次登录时,CLI 会用这个地址发起设备码授权。
- 登录成功后,如果本地保存了
refreshToken,CLI 续期时还需要知道同一个授权服务地址。 - 用户执行
tcb logout时,CLI 也需要回到这个地址发起revoke_token。
1.2 同步登录与分步登录
CloudBase CLI 对这套流程提供两种使用方式:
| 方式 | 命令 | 适用场景 |
|---|---|---|
| 同步登录 | tcb login | 用户直接在终端操作,允许当前命令持续等待授权完成 |
| 分步登录 | tcb login start + tcb login complete --session-id <sessionId> | 聊天工具、OpenClaw 类工具、机器人或远程执行器场景,需要先把授权信息返回给上层系统 |
同步登录
tcb login
CLI 行为
- 申请设备码。
- 展示并尝试打开企业自建授权页。
- 轮询
/auth/token。 - 保存本地登录态。
分步登录
tcb login start
tcb login complete --session-id <sessionId>
CLI 行为
tcb login start负责申请设备码并输出授权信息,同时在本地创建一个登录会话,返回sessionId。tcb login complete负责根据sessionId找回本地保存的设备码会话,在用户完成浏览器确认后继续轮询并完成登录。
1.3 工作流程
2. 参考架构:基于参考实现的实现方式
这一节开始引入参考实现。它的作用不是介绍仓库本身,而是把前面的协议和流程落到代码结构上。
参考实现仓库:cloudbase-cli-auth-endpoint
2.1 参考架构
2.2 目录结构
cloudbase-cli-auth-endpoint/
├── docs/
│ └── protocol.md # 参考实现内部使用的协议说明
├── public/
│ └── cli-auth.html # 企业自建授权页,输入 user_code 并确认授权
├── src/
│ ├── server.ts # HTTP 入口,定义 /auth/device/code、/auth/device/verify、/auth/token
│ ├── config.ts # 端口、过期时间、grant_type、STS 时长等配置
│ ├── types.ts # 设备码记录、refresh token 记录、请求体类型定义
│ └── utils/
│ ├── device-store.ts # 设备码和 refresh token 的过期清理逻辑
│ ├── oauth.ts # 设备码、用户码生成与 OAuth 错误结构
│ ├── sts.ts # 调用腾讯云 STS 获取临时凭证
│ ├── tcb.ts # 查询 envIds、envList、envBillingInfoList
│ └── public-dir.ts # 静态页面目录解析
├── .env.example # 启动示例服务需要的环境变量
└── README.md # 本地运行和手工联调示例