跳转到内容

cnb-rs auth

cnb-rs auth <subcommand>

认证管理,管理 CNB 平台的登录凭证。

cnb-rs 支持两种登录方式:OAuth2 设备授权流(默认,RFC 8628)与 Personal Access Token(PAT,通过 --token / --with-token 提供)。无论哪种方式,token 默认保存到系统 keyring;仅在 keyring 不可用,或显式使用 --insecure-storage 时,才会回退为写入本地配置文件 ~/.cnb/config.toml

也可以通过环境变量提供 Token,适合 CI/CD 等自动化场景。详见 环境变量 章节。

可用命令

对齐 gh auth 的 8 子命令全集:

账号生命周期

Token 操作

Git 集成

环境变量

cnb-rs 按以下优先级查找认证 Token:

  1. 域名特定环境变量 CNB_TOKEN_{DOMAIN}(域名去掉 .-,如 CNB_TOKEN_cnbcool
  2. 通用环境变量 CNB_TOKEN
  3. keyring 当前激活账号对应的 token(OAuth blob 或 PAT 裸字符串)
  4. 配置文件 ~/.cnb/config.toml 中以明文存储的 PAT

环境变量优先级高于 keyring / 配置文件,适合在 CI/CD 流水线中使用:

bash
export CNB_TOKEN=cnb_xxxxxxxxxxxx
cnb-rs issue list
powershell
$env:CNB_TOKEN="cnb_xxxxxxxxxxxx"
cnb-rs issue list
yaml
env:
  CNB_TOKEN: ${{ secrets.CNB_TOKEN }}

配置文件

配置文件中保存的是账号元数据和当前激活账号。只有明文回退模式下,Token 才会出现在配置文件里。 格式如下:

toml
domain = "cnb.cool"
git_protocol = "https"

[auth."cnb.cool"]
user = "octocat"

[auth."cnb.cool".users.octocat]
storage = "keyring"
toml
domain = "cnb.cool"
git_protocol = "https"

[auth."cnb.cool"]
user = "alice"

[auth."cnb.cool".users.alice]
storage = "config"
token = "cnb_xxxxxxxxxxxx"

[auth."cnb.cool".users.octocat]
storage = "keyring"

[auth."example.com"]
user = "bob"

[auth."example.com".users.bob]
storage = "keyring"

安全考虑

  • 默认使用 keyring(Windows Credential Manager / macOS Keychain / Linux Secret Service),避免将 Token 直接写入磁盘
  • 当 keyring 不可用,或显式使用 --insecure-storage 时,Token 才会明文写入配置文件
  • 默认走 OAuth2 设备授权流,用户在浏览器中完成授权,CLI 不直接读取/暂存 token 字符串
  • 支持为同一域名保存多个账号,并通过 auth switch 切换激活账号
  • status 命令对 Token 脱敏显示(仅保留前 4 位和后 4 位);使用 -t / --show-token 才会显示完整 token
  • 环境变量 Token 无法通过 CLI 移除,需用户手动 unset
  • logout 命令仅移除本地配置,不会撤销远程 Token

与 gh 对照

能力gh authcnb-rs auth
login✓ + OAuth2 设备授权流默认
logout✓ + --user✓ + -u/--user
status✓ + -t/--show-token / -a/--active
switch✓ + 交互式选择
token✓ + -u/--user
refresh✓ + -u/--user 限 OAuth 账号
setup-git✓ + -H/--hostname (大写 H 避免与 clap -h 冲突)
gitcredential✓ 严格遵循 git credential protocol

另请参阅

Released under the MIT License.