North Coder
CLI

登录态 Token

通过 ncoder 向常驻后端注入用户登录态 token,让 Agent 工具 CLI 带身份运行。

North Coder 嵌入小北统一产品 shell 后,shell 通过 ncoder 把当前用户的登录态 token(默认 NORTH_AUTH_TOKEN)注入常驻后端内存。后端在会话 Agent 调起工具 CLI 时,把它作为环境变量注入子进程,使依赖登录态的 CLI 能带用户身份运行。

后端只做纯透传管道:不验签、不解析、不管过期,token 只存在进程内存中,不落盘,重启即清空。这不是 SSO/OIDC——签发与刷新由 shell 负责。

需要从宿主程序而非 CLI 直接调用?同样的能力通过 HTTP 控制面暴露,见 HTTP API — 登录态 Token

快速使用

# 注入(shell 在启动、重连、token 刷新时执行)
printf '%s' "$NORTH_AUTH_TOKEN" | ncoder login

# 注销时清除
ncoder logout
  • token 值只从 stdin 读取,绝不作为命令行参数传入,避免泄漏到 ps 输出或 shell 历史。
  • 后端只把 token 存在进程内存里,绝不写入磁盘
  • 下一次 Agent 工具运行时,token 作为环境变量 NORTH_AUTH_TOKEN 注入它调起的 CLI 子进程。

命令

命令行为
ncoder token set <NAME>stdin 读取 token 值;幂等写入条目 <NAME>(覆盖式)。
ncoder token ls列出条目:名称 + 脱敏值 + updated_at(绝不显示原值)。
ncoder token rm <NAME>删除条目 <NAME>
ncoder loginncoder token set NORTH_AUTH_TOKEN 的语法糖。
ncoder logoutncoder token rm NORTH_AUTH_TOKEN 的语法糖。

<NAME> 必须是合法的环境变量标识符([A-Za-z_][A-Za-z0-9_]*)。表的键名就是注入到 Agent 工具 CLI 的环境变量名。

ncoder 是一层很薄的 HTTP 客户端,这些命令通过标准服务发现(或 --server / NC_SERVER + --token / NC_TOKEN)定位常驻后端,调用 /api/runtime-tokens 控制面端点。

stdin 约定

  • token 值从 stdin 读取,仅剥离结尾的换行符(\n 及其前导 \r),其余字符原样保留。登录态 token 是不含空白的不透明串,所以剥行尾是安全的。
  • 空 stdin 是硬错误,不会注入空白 token。
  • 绝不把 token 放进 argv(不支持 ncoder login "$TOKEN")。stdin 让密钥不进入 ps 输出和 shell 历史。

推荐写法:

printf '%s' "$NORTH_AUTH_TOKEN" | ncoder login        # 无尾换行
echo "$NORTH_AUTH_TOKEN"        | ncoder login        # 尾换行被剥离
ncoder login < /run/secrets/north_auth_token          # 从密钥文件读取

注入契约(出站)

  • 对表中每个条目 name → value,后端在每次会话 Agent 工具运行时,把 name=value 设入 Agent 工具 CLI 子进程的环境。
  • 默认名 NORTH_AUTH_TOKEN 对齐小北生态约定,下游 CLI 无需改动即可读取。
  • 环境每次工具运行重建,所以 ncoder login下一次 Agent 运行生效;进行中的运行不受影响。
  • 作用域仅限 Agent 工具 CLI——用户交互终端(PTY)和 MCP server 子进程不注入

运维规则(供 shell 对接)

  1. 启动即注入。 后端每次(重)启动后表都是空的。shell 在每次(重)连接、检测到新后端时必须(重)注入 token。
  2. 刷新/过期时重注入。 后端不验签也不解析过期——纯透传。token 轮换或过期时,shell 必须用 ncoder login 推送新值(幂等覆盖)。过期 token 会让下游 CLI 调用失败,直到重新注入。
  3. 不要依赖持久化。 token 永远不会跨后端重启留存(这是有意的安全边界)。把注入当作幂等且廉价的操作。
  4. 注销即清身份。 ncoder logout 删除条目,后续 Agent 运行不再携带 NORTH_AUTH_TOKEN

安全要点

  • 仅内存:表绝不序列化到 state.jsonconfig.json 或任何 SQLite,进程重启即清空。
  • 绝不回显原值token lsGET 只返回脱敏预览(固定 8 个 * + 末 4 位,极短 token 全打码)和 updated_at
  • 值只经 stdin(入站)和 PUT body(走 loopback)传输,绝不经 argv 或 URL 路径/查询。

完整设计见 RFC-0091;shell 对接契约见仓库内 docs/integrations/ncoder-login-token-injection.md

本页内容