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 實例增加鑑權能力的場景。

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

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

小夜