Skip to content

主站个人 MCP 授权与考勤 E2E 验收 ​

本记录补齐认证中心恢复后的主站证据。适用范围为 business Schema 7、独立 Keycloak 与远程考勤 MCP、主站 API/worker 和浏览器。账号、token、原始员工结果及截图保存在私有验收目录,不进入仓库。

验收结果 ​

场景独立观察结果结果
本地超管连接企业考勤浏览器通过本地密码登录,JWT 的 auth_method 为 password;在资源授权页单独登录企业账号并确认 OAuth,回到主站后本人连接为 connected,平台角色不变Passed
三种角色分别授权超管、普通管理员、普通用户各自完成浏览器授权;管理员与普通用户保持原角色Passed
未连接的直接 MCP 与 Skill 依赖worker 测试要求模型收到连接指引且无考勤工具,最终普通答复完成,没有成功考勤审计Passed
浏览器未连接与断开后的普通聊天超管两种状态均显示连接提示,实际模型正常回复;普通用户未连接时也完成实际模型答复并显示提示Passed
运行中断开模型已收到工具 schema 后断开,旧工具对象不能成功调用;下一个请求得到连接指引,正常完成Passed
刷新失效真实授权服务器拒绝失效 refresh token,数据库状态变为 reconnect_required,Skill 路径给出连接指引并正常完成答复Passed
有效刷新与轮换将本地凭据到期时间提前,worker 通过真实授权服务器刷新;回读 refresh token 已轮换,真实考勤工具成功;浏览器实际模型也返回本人记录Passed
三用户考勤隔离相同 MCP、相同共享智能体与日期范围,三名用户分别取得年假、加班、外勤;工具审计和最终正文均不含另外两类员工记录Passed
最终输出归属逐次回读实际用户 uid、模型、Turn.result_run_id、Run.output_message_id 与同 Run 工具审计,并核对浏览器正文Passed
跨用户会话读取使用另一普通用户或普通管理员的真实 token 读取上述私人会话,三次均返回 404Passed

执行与证据边界 ​

浏览器先完成正常平台登录及三个个人授权,再将测试进程可读的会话结果文件传入 API 容器:

bash
docker compose exec -T \
  -e MCP_LAB_ACCOUNTS_FILE=/tmp/mcp-main-runtime-accounts.json \
  -e TEST_BASE_URL=http://localhost:5050 \
  api uv run --group test pytest \
  test/e2e/test_mcp_personal_oauth_e2e.py \
  test/e2e/test_mcp_runtime_availability.py -q

结果为 8 passed,一项 pytest 缓存目录权限警告不影响用例结果。这些测试使用固定模型协议 oracle,调用真实 API、worker、授权服务器、考勤服务与 PostgreSQL,不能单独证明真实供应商模型的续答。

Playwright 另完成 7 次真实模型问答:三名用户各一次本人考勤、超管未连接/强制刷新/断开后三次、普通用户未连接一次。模型为实际部署的 DeepSeek;逐次检查最终页面与持久结果。浏览器检查保留默认 TLS 证书验证。上述三名用户各自的真实考勤数据、资源账号身份和平台会话均未通过 mock 替代。

临时 MCP、Agent、Skill 与固定模型供应商按测试生命周期清理;真实模型隔离用例的会话保留供人工回看。主企业三名用户的正式 MCP 连接保留。此轮以验证现有行为为主,未修改运行代码,也未重新部署认证服务。

独立发现与未覆盖范围 ​

普通企业账号创建私有测试智能体时,OIDC uid 长于 agents.created_by/updated_by 的 VARCHAR(64),触发数据库长度错误。该问题发生在智能体创建,早于 MCP 加载。本次普通用户用例由超管创建并共享测试智能体,用户运行时身份仍由本人会话取得;没有用超管身份替代工具执行用户。普通用户自行创建私有智能体及考勤的后续修复与主站验收见企业 UID 归属字段容量修复。

本记录不扩展为所有 OAuth MCP 的兼容性声明,也不包含 GitHub、Notion、CIMD、发现 fallback 或无效 scope 的远端复测。协议差距继续由兼容性核对说明。

后续验收与当前边界 ​

2026-10-19 的早期部署在 UID 修复和认证拓扑调整后,记录两份 worker E2E 共 12 项通过:包含三角色、直接/预加载 Skill/动态嵌套 Skill、断开、刷新失败与轮换;协作子 Run 与实际 scheduled occurrence 使用不同于 Agent 创建者的普通员工身份。三角色实际 DeepSeek 问答、普通用户自行创建和编辑私有 Agent、授权概览键盘入口,分别以页面、完整 UID、最终 result Run 和同 Run 工具审计回读。该阶段前端 lint/build 和 726 项 unit 通过,相关真实 HTTP/PostgreSQL 集合 82 项通过。

上述是连接提示仍存在、通用配置调整前的历史结果。service 可用性收敛已经删除聊天连接提示和逐服务通知,工具目录改为每 Run 装配,部署密钥与公开地址也使用通用配置;历史浏览器截图和早期 worker 通过数不证明这些最终改动。当前决定、实际运行行为与后续测试范围由 MCP 个人授权与运行边界维护。

早期拓扑切换曾出现资源连接 502 与刷新网络异常,网络修复后重新完成上述验收;网络故障保持显式失败。断开夹具使用真实授权期限,副本移除 refresh token,避免消耗源连接的轮换凭据;判定要求实际断开、最终 completed 和无成功资源调用,不接受无关失败作为通过。

本项目基于 MIT License 开源,欢迎使用和贡献。