4.1 KiB
4.1 KiB
u号租验证码登录设计
目标
在 BuildFlow 外部系统凭证弹窗中输入 u号租账号和密码后,展示 u号租使用的腾讯验证码。验证码由用户本人完成,验证通过后系统继续调用 u号租登录接口,获取并保存登录 Cookie。
本功能只负责展示验证码和承接用户操作,不实现验证码识别、自动点击或绕过。
固定流程
- 用户在外部系统凭证弹窗输入 u号租账号和密码。
- 前端使用 u号租对应的腾讯验证码应用 ID
192192826调起腾讯验证码 SDK。 - 腾讯 SDK 自行完成
cap_union_prehandle、tdc.js、验证码图片和blob:资源的加载,前端不手工拼装这些内部请求。 - 用户在腾讯验证码弹窗内手动完成安全验证。
- 腾讯 SDK 回调成功结果,前端取得
ticket和randstr。 - 前端把账号、密码、
ticket、randstr提交给 BuildFlow API。 - BuildFlow API 按 u号租真实登录请求契约提交登录,不猜测字段名或加密方式。
- 登录成功后,API 从响应会话中提取
b.uhaozu.com和mapi.uhaozu.com所需 Cookie。 - API 用新 Cookie 覆盖该外部系统原有 Cookie 凭证,保留非 Cookie 类型凭证。
- 前端提示登录成功并刷新凭证状态。
前端设计
- 落点:
build-flow.web/apps/web-antdv-next/src/views/monitoring/systems/modules/credential-form.vue。 - 账号和密码为空时不调起验证码。
- 验证码脚本按需加载,避免全站页面无条件加载第三方脚本。
- 点击“登录”后直接展示腾讯原生验证码弹窗,不复制验证码图片,不自行绘制验证内容。
- 用户关闭或验证失败时保持凭证弹窗打开,不调用登录 API。
- 验证通过后锁定登录按钮,调用后端登录接口,完成后恢复按钮状态。
- 页面不保存账号、密码、验证码票据或 Cookie 到本地存储。
后端设计
- HTTP 入口保留在
BuildFlow.Host/Endpoints/Monitoring,权限沿用外部系统管理权限。 - Endpoint 只转换请求并发送 Monitoring 模块的 MediatR Command。
- Monitoring Application Handler 校验外部系统存在且类型为
UHaoZu。 - Monitoring Infrastructure 负责按真实 u号租登录契约发起请求并维护 CookieContainer。
- 登录请求字段、密码处理方式、必要请求头和成功判断必须来自实际 u号租登录请求,不使用当前草稿中的猜测字段。
- 成功后只返回凭证数量和状态,不向前端返回 Cookie 明文。
- 密码、
ticket、randstr、Cookie 和完整登录响应不得写入日志。 - 本次复用现有
SystemData.Credentials,不新增数据库表或迁移。
错误处理
- 腾讯验证码脚本加载失败:前端提示刷新重试。
- 用户取消验证码:仅结束本次操作,不显示登录失败。
- 验证票据失效或被拒绝:后端返回业务错误,用户重新调起验证码。
- u号租账号或密码错误:展示 u号租返回的可读业务信息,不保存 Cookie。
- u号租请求超时或不可用:返回统一业务错误,不泄露上游响应、请求头或凭证。
- 登录响应成功但没有有效 Cookie:视为失败,不覆盖旧凭证。
测试与验收
- 前端测试:账号密码为空时不弹验证码;取消验证不调用登录 API;成功回调只调用一次登录 API;失败后按钮恢复。
- 后端测试:非 u号租系统被拒绝;上游失败不修改凭证;无 Cookie 不覆盖旧凭证;成功时覆盖 Cookie 并保留 Header/Token。
- 构建验证:前端 typecheck/build,后端解决方案 build/test。
- 人工验收:在真实环境输入测试账号,确认腾讯原生验证弹出;用户手动完成后登录继续;数据库凭证中出现有效 Cookie;随后 u号租 Connector 能使用该 Cookie 请求数据。
明确不做
- 不识别验证码图片。
- 不自动点击验证码。
- 不下载验证码图片后自行实现验证 UI。
- 不使用 Playwright、远程桌面、Sidecar 或反向代理替换用户指定流程。
- 不把账号、密码或 Cookie 暴露给浏览器日志、服务日志或接口响应。