cnb-rs auth refresh
cnb-rs auth refresh [-u <username>] [--client-id <id>]用 refresh_token 静默刷新 OAuth access_token,避免完整重走设备授权流。对齐 gh auth refresh。
仅对 OAuth 登录的账号有效;PAT 登录的账号没有 refresh_token,运行时会 friendly bail 让用户改用 cnb-rs auth login 重新走 OAuth。
工作流程
- 决定 target username:默认当前 active 账号,
--user指定其他保存账号 - 校验账号存在且是 OAuth 模式(不是 PAT)
- 从 keyring/config 读
OAuthSecretBlob拿到refresh_token - 调
POST {platform}/oauth2/token用grant_type=refresh_token换新access_token - 持久化新 blob(
refresh_token缺失时保留旧的 + warn)
选项
-u, --user <USERNAME>: 指定用户名(默认当前 active 账号)--client-id <ID>: OAuth2 设备授权流使用的client_id(默认cnb_cli,可用环境变量OAUTH2_CLIENT_ID覆盖)
继承的全局选项:
--domain <DOMAIN>: 指定目标域名(默认:cnb.cool)
示例
bash
# 刷新当前 active 账号
$ cnb-rs auth refresh
正在刷新 octocat 的 token...
✓ 已刷新 octocat 的 token,新过期时间:2026-08-15 14:00:00 +0800
# 刷新指定账号
$ cnb-rs auth refresh --user alice
# PAT 账号无法 refresh
$ cnb-rs auth refresh --user pat_user
错误: 账号 pat_user 是 PAT 登录,没有 refresh_token;如需轮换请用 `cnb-rs auth login` 重新走 OAuth 流
# 未知账号
$ cnb-rs auth refresh --user no_such_user
错误: 未找到账号 no_such_user (cnb.cool)服务端未返回新 refresh_token 的情况
某些 OAuth 服务端按 RFC 6749 §6 只在初次签发 refresh_token,之后 refresh 时仅返回新 access_token。cnb-rs 检测到这种情况会保留旧 refresh_token 并给一条 warn:
⚠ 服务端未返回新 refresh_token,下次再刷新可能失败后续若 refresh 真失败,重新走 auth login 即可。
另请参阅
- cnb-rs auth
- cnb-rs auth login — OAuth 设备授权流登录
- cnb-rs auth status — 查看 token 过期时间
- cnb-rs auth token — 打印当前 token