dsh-auth-proxy:DSH Web GUI 的令牌鉴权反向代理插件

前言

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

核心功能

  1. 令牌鉴权反向代理:提供内置登录页,使用 SHA-256 + timingSafeEqual 校验令牌,避免时序侧信道攻击。
  2. HttpOnly 会话 Cookie:会话为 HttpOnly、SameSite=Lax 的签名 Cookie,Max-Age 设为 10 年。服务端不存会话,重启后 Cookie 依然有效;但更换令牌会使所有已登录会话立即失效。
  3. IP 白名单与失败锁定:支持 CIDR 格式的 IPv4 白名单,可配置失败锁定阈值与时长。
  4. 配置实时可改:通过 Host 的 settings 分区管理,无需重启或重启进程即可修改配置。
  5. 品牌层重写:支持在代理层重写页面标题、favicon、PWA manifest,支持注入侧边栏视觉。
  6. 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 白名单,留空则一律要令牌。

注意事项与限制

  1. 无 TLS:插件本身不处理 TLS,禁止绑通配或公网 IP(如 0.0.0.0 或公网 IP)。外部访问请在前方挂 TLS 反向代理(如 nginx/Caddy)终止加密后回指本监听地址。
  2. 无单点剔除:会话为无状态签名 Cookie,重启不失效,但更换令牌即全体下线,登出仅清客户端 Cookie。
  3. 移动端耦合:移动端设置面板的折叠与宽度优化耦合了 web-all 的结构,若 web-all 语义级重构可能影响适配。
  4. 配置分层:仅通过 Host 的 settings 写入,不提供独立的配置文件。

总结

dsh-auth-proxy 提供了一个轻量级的令牌鉴权层,通过在本地端口监听并转发流量,实现了对 DSH Web GUI 的安全访问控制。适合需要在无源码改动的情况下为本地 DSH 实例增加鉴权能力的场景。

羽毛球分组比赛记分
小程序二维码

欢迎使用《羽毛球分组比赛记分》微信小程序

小夜