前言¶
DeepSeek Harness (DSH) 采用插件化架构,Web GUI 默认以回环地址对外提供服务。在需要直接对外暴露或在内网多环境共享时,直接访问缺乏鉴权机制。本插件在 DSH Web 前面加一道静态令牌登录墙,无需修改 DSH 源码即可为 Web 服务增加令牌校验与访问控制。
是什么¶
dsh-auth-proxy 是一个由 wxyzh 维护的插件。它监听在本地地址(默认 127.0.0.1:8443),未认证访问显示内置登录页,校验令牌后签发 HttpOnly 会话 cookie,再把 HTTP 与 WebSocket 流量转发给回环的 dsh webserver(默认 127.0.0.1:3080)。
安装与启用¶
安装插件需要确保 pnpm 在 PATH 上。插件会自动挂进 web profile roster。
dsh plugin --profile web add @wxyzh/dsh-auth-proxy
核心功能¶
- 令牌鉴权反向代理:提供内置登录页,使用 SHA-256 + timingSafeEqual 校验令牌,避免时序侧信道攻击。
- HttpOnly 会话 Cookie:会话为 HttpOnly、SameSite=Lax 的签名 Cookie,Max-Age 设为 10 年。服务端不存会话,重启后 Cookie 依然有效;但更换令牌会使所有已登录会话立即失效。
- IP 白名单与失败锁定:支持 CIDR 格式的 IPv4 白名单,可配置失败锁定阈值与时长。
- 配置实时可改:通过 Host 的 settings 分区管理,无需重启或重启进程即可修改配置。
- 品牌层重写:支持在代理层重写页面标题、favicon、PWA manifest,支持注入侧边栏视觉。
- web-all 兼容:兼容
web-all插件,还原/remote前缀,适配移动端设置面板的响应式布局。
配置¶
插件通过 Host 的 settings 管理配置,支持热更新。
组合入口配置示例:
enabled: true
host: 127.0.0.1
port: 8443
targetHost: 127.0.0.1
targetPort: 3080
# 推荐使用环境变量
token: !!js process.env.DSH_AUTH_TOKEN
brand.enabled: true
brand.title: 'MyApp'
accessUrls: ['https://my-app.example.com']
allowedIps: ['127.0.0.1', '10.0.0.0/8']
maxFailures: 0
lockoutMinutes: 15
配置项说明:
* token:共享访问令牌。安全默认为空或占位符 change-me 时,代理保持禁用、绝不监听。
* brand:开启后进行品牌层重写,支持自定义标题、图标和侧边栏视觉。
* accessUrls:仅用于展示,声明对外访问的入口地址(可含 HTTPS 域名)。
* allowedIps:IP 白名单,留空则一律要令牌。
注意事项与限制¶
- 无 TLS:插件本身不处理 TLS,禁止绑通配或公网 IP(如
0.0.0.0或公网 IP)。外部访问请在前方挂 TLS 反向代理(如 nginx/Caddy)终止加密后回指本监听地址。 - 无单点剔除:会话为无状态签名 Cookie,重启不失效,但更换令牌即全体下线,登出仅清客户端 Cookie。
- 移动端耦合:移动端设置面板的折叠与宽度优化耦合了
web-all的结构,若 web-all 语义级重构可能影响适配。 - 配置分层:仅通过 Host 的 settings 写入,不提供独立的配置文件。
总结¶
dsh-auth-proxy 提供了一个轻量级的令牌鉴权层,通过在本地端口监听并转发流量,实现了对 DSH Web GUI 的安全访问控制。适合需要在无源码改动的情况下为本地 DSH 实例增加鉴权能力的场景。