用户与登录
这页写给管理员:谁能进管理台,怎么设管理员,员工离职或账号要停用时怎么处理。
员工自己怎么 sid-code login、凭据存在哪,写在企业登录。部署时怎么接飞书、第一个管理员怎么来,写在部署与配置。
员工不需要管理台权限
用 sid-code 和进管理台是两件事。新用户默认是 member:进不了管理台,但照样能 sid-code login,策略、预算、插件市场、飞书文档工具都正常可用。不要为了让员工能用 sid-code 就把人设成 admin。
两种登录方式
| 飞书登录 | 口令应急登录 | |
|---|---|---|
| 用途 | 日常主路径 | 飞书不可用、首次引导管理员时 |
| 身份 | 飞书账号,按 union_id 识别 | 共享口令(AUTH_USERNAME / AUTH_PASSWORD),不对应某个人 |
| 角色 | 看用户行上的 admin / member | 一律视为 admin |
| 审计 | login | 每次写一条 break_glass |
| 开关 | 配齐飞书三项即启用 | AUTH_PASSWORD_LOGIN_ENABLED,默认开,生产建议关 |
管理台会话有效期 8 小时,过期重新登录。每次请求都会重新查一遍用户状态和角色,所以吊销、降级在下一次请求就生效,不用等会话过期。
角色
只有两种:
| 角色 | 管理台 | sid-code |
|---|---|---|
admin | 全部页面 | 正常使用 |
member | 整页 403「没有管理台权限」,只有「退出登录」按钮 | 正常使用 |
新用户第一次飞书登录时是 member。例外是 ADMIN_BOOTSTRAP_UNION_IDS 里的人:每次登录都会被设为 admin,包括被别人降级之后的下一次登录。
没有更细的权限划分,例如「只能看成本」「只能管某个团队」。
在管理台里操作
页面在左侧菜单「用户」。飞书登录过的人都会出现在这里;口令应急登录不对应用户行。
表格列:
| 列 | 含义 |
|---|---|
| 姓名 | 取自飞书;没有姓名时显示 union_id |
| 邮箱 | 取自飞书,没有显示 — |
| 角色 | 下拉框,改了立即保存,没有二次确认 |
| 状态 | 「正常」或「已吊销」 |
| 设备 | 绑在此人名下的设备数 |
| 最近登录 / 首次登录 | 飞书登录时间 |
「操作」列:
| 按钮 | 作用 |
|---|---|
| 吊销 | 停用此人,见下一节。会先弹出确认「吊销该用户?」 |
| 恢复 | 已吊销的人才有。点了立即恢复 |
| 登录记录 | 把下方「登录审计」表筛到这个人 |
| 用量 | 跳到「成本」页,只看这个人的用量 |
授予或收回管理员
在「角色」下拉里选 admin 或 member,提示「角色已更新」即生效。对方的管理台会话下一次请求就按新角色处理。
- 不能把自己降为 member(409)。要降自己,请另一位管理员操作;
- 系统不检查最后一个管理员:你可以把除自己外的所有 admin 都降掉。建议始终保持至少两位 admin;
- 被降级的人如果在
ADMIN_BOOTSTRAP_UNION_IDS里,下次登录又会变回 admin。要真正收回,先从这个变量里删掉并重启。
吊销用户:员工离职时
吊销用户会连带三件事,一次完成
- 此人的管理台会话在下一次请求时返回 401;之后也不能再用飞书登录(登录页显示「你的账号已被管理员停用。」)。
- 此人名下所有设备的凭据被吊销,这些设备访问企业后端一律 401,员工端状态栏提示「企业登录已失效,执行 /login 重新登录」,但重新登录会被拒。
- 此人保存在后端的飞书 token 被删除,飞书文档工具立即不可用。
恢复不会恢复这些:只是把状态改回「正常」。本人需要重新 sid-code login,飞书文档工具需要重新授权。
不能吊销自己(409)。吊销时不要求填原因。
吊销用户还是吊销设备
| 场景 | 用哪个 |
|---|---|
| 员工离职、账号要停用 | 吊销用户:所有设备一起失效,并且不能再登录 |
| 一台电脑丢了、换了 | 吊销设备(「设备」页):只影响这一台;本人在新电脑上照常登录 |
| 注册码设备(CI 机器)不再使用 | 吊销设备。注册码设备不绑人,吊销用户管不到它 |
吊销设备之后,设备的主人可以在同一台电脑上重新 sid-code login 拿到新凭据。想让一个人彻底用不了,要吊销用户。详见设备与注册码。
吊销不等于立刻停下正在跑的会话
员工端是在下一次访问企业后端时才收到 401。已经在跑的 sid-code 会话不会被远程终止,企业后端也不代理模型流量,员工自己的模型 API Key 不受影响。吊销切断的是企业后端提供的一切(策略更新、市场、飞书工具、账本),不是员工对模型的访问。
登录审计
「用户」页下方的「登录审计」表,每次登录相关的动作一行。
| 事件 | 界面显示 | 什么时候写 |
|---|---|---|
login | 飞书登录 | 管理台飞书登录成功 |
logout | 登出 | 管理台飞书会话登出 |
break_glass | 口令应急登录 | 口令登录成功,每次都写 |
revoke | 吊销 | 管理员吊销用户,详情里有吊销了几份凭据 |
restore | 恢复 | 管理员恢复用户 |
role_change | 改角色 | 管理员改角色,详情里有改前改后 |
login_rejected | 登录被拒 | 租户不符或账号已吊销 |
cli_login | CLI 飞书授权 | 员工 sid-code login 在浏览器里授权完成 |
cli_exchange | CLI 登录 | 员工端用一次性码换到设备凭据 |
cli_conflict | CLI 设备冲突 | 这台设备已绑给另一个人,登录被拒(409) |
cli_logout | CLI 登出 | 员工执行 sid-code logout,设备解绑 |
break_glass 应该很少出现。在关闭了口令登录的生产环境里看到它,说明有人改过开关,值得追问。
ADMIN_BOOTSTRAP_UNION_IDS 在登录时自动提权不写 role_change。
登录失败:?error= 的含义
飞书登录失败时,浏览器回到管理台登录页,地址栏带 ?error=,页面显示对应文案:
error | 页面文案 | 原因 | 处理 |
|---|---|---|---|
access_denied | 你在飞书授权页取消了授权。 | 用户在飞书页面点了拒绝 | 重新登录并同意 |
invalid_state | 登录链接已过期或不是从本页发起的,请重新点击「飞书登录」。 | 超过 10 分钟、链接被重复使用,或从一个域名发起、回调到了另一个域名 | 从登录页重新点;反复出现时检查 PUBLIC_BASE_URL 和用户访问的域名是否一致 |
feishu_failed | 飞书授权失败,请稍后重试。 | 后端向飞书换 token 或取用户信息失败 | 查后端日志;常见原因是 App Secret 错、应用没发布版本 |
tenant_mismatch | 该飞书账号不属于本企业。 | 不是 FEISHU_TENANT_KEY 指定的租户 | 预期行为;或检查 FEISHU_TENANT_KEY 是否填错 |
revoked | 你的账号已被管理员停用。 | 用户被吊销 | 需要时在「用户」页恢复 |
员工端 sid-code login 失败时提示在终端里,见企业登录。
接口状态码
管理员排障时会碰到的:
| 状态码 | 出现在 | 原因 |
|---|---|---|
| 401 | 管理台任意接口 | 没登录、会话过期、账号已吊销 |
| 401 | 口令登录 | 用户名或密码错误(不区分哪个错) |
| 403 | 管理台任意接口 | 当前用户是 member |
| 404 | 口令登录 | AUTH_PASSWORD_LOGIN_ENABLED=false |
| 404 | 改角色、吊销、恢复 | 用户不存在 |
| 409 | 改角色 / 吊销 | 不能把自己降为 member / 不能吊销自己 |
| 503 | 飞书登录相关 | 飞书三项没配齐 |
| 409 | 员工端 sid-code login | 这台设备已绑给另一个人 |
能力边界(如实说)
1. 角色只有两级。 没有只读管理员、按团队划分的管理员。所有 admin 能看到全部人的轨迹和用量。
2. 不防「最后一个管理员」。 唯一的 admin 可以被其他 admin 降掉;所有 admin 都没了,只能用口令应急登录(如果没关)或 ADMIN_BOOTSTRAP_UNION_IDS 恢复。
3. 口令应急登录不对应某个人。 审计里只看得到 break_glass 和用户名,看不出是谁。这就是为什么生产要关掉它。
4. 用户列表只来自飞书登录。 没登录过的员工不会出现,不能预先建用户、预先设管理员(除了用 ADMIN_BOOTSTRAP_UNION_IDS)。
常见问题
员工换了电脑
不用管理员操作。员工在新电脑上 sid-code login 即可,新设备自动绑到此人名下。旧电脑上的凭据还有效,确定不用了在「设备」页吊销旧设备。
新设备默认不在任何团队,需要的话在「设备」页用「调整归属」分进团队。
员工登录时报「这台设备已绑定给另一个用户」(409)
一台设备同时只能绑一个人。让原用户在这台电脑上执行 sid-code logout;原用户已经离职、无法操作时,吊销原用户后,新用户就能接管这台设备。
在 SSH 远程机器上登录
见企业登录:用 SID_CODE_NO_BROWSER=1 只打印链接,再用 ssh -L 把回调端口转发回本机。完全没有浏览器的机器改用注册码。
把一个人设成 admin 后,对方还是看到 403
对方刷新页面即可。如果还不行,看「登录审计」里对方最近一次登录用的是不是同一个飞书账号(同名不同账号很常见)。