企业登录
sid-code login(TUI 里是 /login)登录的是企业后端(backend.url),用飞书身份。 它不是模型厂商账户:模型 API Key 仍然写在 settings.json 或环境变量里,和登录无关。
没有企业后端的个人用户不需要登录,下面的内容都可以跳过。
登录一次做两件事:确认你是谁,并把这台电脑登记到你名下,拿到一个设备凭据。 之后企业策略、远程预算、成本账本、事件上报、 企业插件市场和公司后端提供的 MCP 都用这个凭据鉴权。所以它排在那两页前面。
前置条件:配置后端地址
二选一:
export SID_CODE_BACKEND_URL=https://<你的后端>/traj// ~/.sid-code/settings.json
{ "backend": { "url": "https://<你的后端>/traj" } }优先级是环境变量 > managed-settings.json > 用户级 settings.json。 项目级 settings 不能设它:否则一个仓库就能把你的凭据引到别处。
没配时 /login 会直接提示怎么配,不会打开浏览器。
地址只接受 https://,或本机调试用的 http://127.0.0.1 / http://localhost,URL 里也不能带用户名密码。 写成别的形式(比如内网的 http:// 地址)会被当作没配,/login 同样提示「未配置后端地址」。 这时执行 /doctor,它会指出是哪个来源的地址不合法。
登录
终端里:
sid-code login # 等价于 sid-code auth loginTUI 里:
/login流程是一样的:
- sid-code 在
127.0.0.1的随机端口起一个回调服务,打开浏览器去企业后端的飞书授权页。 - 你在浏览器里完成飞书授权,浏览器跳回本机回调地址。
- sid-code 用一次性登录码换到设备凭据,写到本地。
浏览器没自动打开时,把输出里的链接复制到浏览器即可。请在 5 分钟内完成授权:超时后本机回调服务会关闭,链接随之作废。
TUI 里的 /login 不会卡住输入框:命令立刻在面板里给出授权链接,授权在后台等。 授权结束(成功、失败、超时或取消)后面板自动关闭,状态栏提示「✓ 已登录企业后端:张三」或失败原因。 等待期间想先对话,按 Esc 关掉面板即可,授权仍在后台等待。
- 再执行一次
/login:返回同一个链接,不会起第二个回调服务。 /login cancel:取消等待,关闭回调服务。- 已经登录时执行
/login:先问你要不要重新登录。重新登录会让服务端吊销旧凭据。
在 TUI 里登录成功后,本会话会立即重新加载企业策略和预算,不用重启。 有一处例外:系统提示词里那段「哪些操作被禁止」的说明不会刷新(刷新会打断 prompt 缓存)。 权限检查本身已经生效,模型碰到被禁止的操作时会收到拒绝结果。 如果新策略禁用了你当前所处的权限模式,sid-code 会把它切回默认并在状态栏提示。
在 SSH 远程机器上登录
远程机器上打开的是远程的浏览器,没有意义。只打印链接、不开浏览器:
SID_CODE_NO_BROWSER=1 sid-code login回调地址是远程机器的 127.0.0.1:<端口>,你本机的浏览器连不到它。 看输出链接里的 port= 参数,在本机另开一个终端做端口转发,再在本机浏览器打开链接:
ssh -L <端口>:127.0.0.1:<端口> <远程机器>凭据存在哪
- 路径:
~/.sid-code/device-credential.json(SID_CONFIG_DIR可改)。 - 权限
0600,明文,不进系统钥匙串。与 API Key、MCP OAuth token 同一档。 - 内容:凭据、过期时间、登录时间、登录用户(后端用户 ID、名字、飞书 union_id)。
- 飞书的 access token / refresh token 不在本机,只保存在企业后端。本机唯一的秘密就是这个设备凭据。
- 凭据只发往与
backend.url同源的地址。
数据流向的完整清单见隐私与数据流向。
有效期
每次使用都会自动顺延,连续一段时间不用才会过期。时长由企业后端配置。
本地文件里记的过期时间是一个参考值:sid-code 每天最多一次向后端同步最新的过期时间。 本地记录显示「已过期」时,凭据照常携带,是否真的失效只认服务端。用 /whoami --verify 确认。
以下情况凭据会失效,需要重新登录:
失效后企业后端会返回 401,TUI 状态栏提示一次「企业登录已失效,执行 /login 重新登录」。
不登录会怎样
前提是配了 backend.url 但没登录(或凭据已失效)。没配 backend.url 时这些企业功能本来就不存在。
不受影响:
- 对话、工具调用、模型请求。
- 本地轨迹、成本账本、会话历史、记忆。
- 本地
managed-settings.json里的策略。 - 轨迹上传(用的是
trace.upload.token,不是设备凭据)。 - 远端功能开关。
策略、预算、账本、事件这四条是 fail-open:不报错、不阻断对话,只写日志。 插件市场和 auth: "sid-backend" 的 MCP 不一样,它们会报错,见下表。
| 功能 | 未登录时 |
|---|---|
| 企业远程策略 | 跳过;10 分钟内拉取过的缓存仍然生效,更早的缓存不再生效 |
| 企业远程预算 | 跳过,等于没有预算限制 |
| 成本账本上报 | 不发,未登录期间的记录只留在本地,登录后也不补发;此前因网络等原因发送失败的记录会保留,登录后自动补发 |
| 企业事件上报 | 不发 |
| 企业插件市场 | 报错:后端返回 401,提示重新登录 |
auth: "sid-backend" 的 MCP | 报错:拒绝连接,提示需要设备凭据 |
跳过 = 企业管控不生效
策略和预算「跳过」意味着企业的限制在这台机器上没生效。对用户是放宽,不是收紧。 这是现有的 fail-open 设计:身份通道出问题时不该让开发者没法干活。 管理员需要确认管控覆盖率时,看企业后端里设备的最近活跃时间(见设备列表)。
查看登录状态
| 入口 | 看什么 | 发网络请求吗 |
|---|---|---|
/whoami | 登录用户、union_id、登录时间、凭据过期时间、后端地址、设备 ID | 不发 |
/whoami --verify | 上面全部 + 服务端是否仍认这份凭据、所属组织 / 团队 | 调一次 /ctl/whoami |
/status | 末尾一行「企业登录:张三(凭据记录有效至 …)」或「未登录,执行 /login」,只在配了 backend.url 时出现 | 不发 |
sid-code auth status | 登录段 + 七条企业通道逐条状态 + 模型 Key 诊断 | 不发 |
sid-code auth status --verify | 同上,并核验凭据、对每条通道发一次不写数据的探测 | 发 |
--json | 上面两条的机器可读版本 | 同上 |
TUI 状态栏默认不常驻显示登录态,只在两种情况临时提示:启动时配了 backend.url 但没登录, 以及任一企业通道收到 401。想常驻显示可以用 /statusline 自己加(见交互界面的「自定义状态栏」一节)。
登出与换人
/logoutsid-code logout # 等价于 sid-code auth logout两个入口的区别是确认步骤:TUI 里的 /logout 会先问你确认;终端里的 sid-code logout 不确认,直接执行。 登出时先通知企业后端解绑这台设备,再删除本地凭据。 TUI 里登出成功只在状态栏提示一行,几秒后自动消失。 后端暂时连不上时本地凭据照样删除,并在面板里说明「通知后端解绑失败」以及接下来该怎么做。
登出不会解除本会话已生效的企业策略:远程策略是企业的管控,登出不应成为绕过它的办法。
换人在同一台电脑上登录:原用户先执行登出,新用户再登录。 原用户没登出就换人,新用户登录时会看到「这台设备已绑定给另一个用户」(HTTP 409), 这时让原用户执行一次 sid-code logout,或联系管理员解绑这台设备。
常见问题
浏览器没打开:复制输出里的链接手动打开。远程机器见上文。
等待授权超时:5 分钟内没完成授权,回调服务已关闭。重新执行 /login。
后端拒绝了登录:浏览器跳回后要在 60 秒内换凭据,登录码只能用一次。重新执行 /login。
401 / 企业登录已失效:凭据被吊销或长期没用过期了,执行 /login。用 /whoami --verify 确认。
409 设备已绑定:见登出与换人。
/doctor 提示已登录但没配 backend.url:凭据还在,但 sid-code 不知道往哪里发。 按前置条件补上后端地址。