dsh-webui-auth:給 DSH WebUI 加一個持久化登錄門禁

前言

DSH 的插件化思路適合把擴展能力作爲獨立包接入。對於需要把 WebUI 暴露給團隊、反代或局域網訪問的場景,一個常見問題是:未登錄的瀏覽器是否還能讀取頁面資源、調用接口、建立即時連接。

dsh-webui-auth 針對這個點提供一個持久化認證插件:先在設置中創建賬號密碼,之後訪問 WebUI 需要先登錄。

這是什麼

dsh-webui-auth 是 DeepSeek Harness(DSH)的 WebUI 身份認證插件,許可證爲 MIT,零依賴。

它做的事情比較集中:在 DSH WebUI 前增加登錄門禁。創建賬號密碼後,未認證的瀏覽器無法加載 WebUI 的資源、調用接口或建立即時連接。認證在 HTTP/傳輸層強制執行。

核心能力

下面介紹它已具備的能力。

  • 四層防護:覆蓋 WebUI 資源、插件 bundle、/api RPC 接口、WebSocket。
  • 不改動 DSH 核心包源碼:通過運行時包裝 webServer 路由實現。
  • fail-closed:預期路由缺失或包裝不完整時拒絕啓用認證。
  • 會話持久化:服務端會話寫入 sessions.jsonl,由 HttpOnly; SameSite=Lax Cookie 攜帶。
  • 憑據存儲:密碼以 scrypt 哈希保存在 dsh-webui-auth.json,明文不落盤。
  • 登錄限流:登錄失敗按客戶端 IP 限流,每分鐘最多 5 次。
  • 審計日誌:安全事件追加寫入 audit.jsonl,客戶端 IP 以 HMAC-SHA256 假名化存儲。
  • 首次初始化:需要每次啓動生成的 setup token
  • 安全頭:登錄頁與 API 響應帶嚴格 CSP、nosniffDENYno-referrernoindexno-store
  • 外觀:登錄頁與設置頁跟隨 DSH 自帶外觀設置。
  • 零依賴。

安裝與啓用

先執行安裝命令:

npx @deepseek-ai/dsh plugin --profile web add dsh-webui-auth

安裝後重啓 DSH 即生效。

首次啓用時,先打開 WebUI 的「設置 → 身份認證」,或訪問:

/dsh-webui-auth/login

然後輸入啓動日誌中打印的 setup token,創建賬號密碼。

啓用後:

1、未登錄訪問任意路徑會跳轉登錄頁。
2、登錄後按會話有效期免登錄,默認 12 小時。
3、修改、禁用、退出均需當前密碼。
4、修改密碼會弔銷所有其他已登錄會話。

如果忘記密碼,刪除數據目錄中的 dsh-webui-auth.json。最多 1 分鐘內認證會自動關閉,之後用新的 setup token 重新創建賬號。

審計與數據文件

審計日誌追加寫入 audit.jsonl。可以通過 CLI 查看:

node index.js audit --limit 50

數據目錄按安裝方式區分:

  • npm / GitHub / tarball 安裝:插件包體位於 node_modules 內,數據目錄爲 node_modules 上級的 .dsh-webui-auth/
  • 本地 link / 源碼安裝:數據目錄爲插件源碼目錄。
  • 兜底目錄:$DSH_HOME/dsh-webui-auth/

0.3.x 升級時,運行數據不自動遷移。需要手動拷貝以下文件:

dsh-webui-auth.json
sessions.jsonl
audit-hmac-key
audit.jsonl

使用注意與邊界

以下邊界在安裝和部署前最好先確認。

  • 插件以當前 dsh 進程權限運行,安裝前應檢查源碼與許可證。
  • WebSocket 升級仍受核心 isTrustedApiRequest 限制。反代或局域網部署時,需要把對外域名加入 client-connection.trustedHosts
  • 運行時路由包裝在熱重載到下一次重掃之間存在不超過 10 秒的未保護窗口。
  • 反代與 DSH 不在同一臺機器時,代理頭不被信任,限流會按代理 IP 聚合。
  • 審計日誌中的 IP 假名化不能防止擁有文件權限的本地攻擊者。
  • 威脅模型爲瀏覽器/網絡客戶端。能直接讀寫宿主進程內存或文件的本地進程不在防護範圍內。
  • 0.1.x 的 SHA-256 憑據自 0.2.0 起不再可校驗。需要刪除憑據文件後重新創建賬號。

適用場景

dsh-webui-auth 適合需要給 DSH WebUI 增加登錄門禁的受控訪問場景:賬號密碼一次創建後會話可持久化,認證覆蓋資源、接口和 WebSocket,審計日誌可本地查看,部署上不需要改動 DSH 核心源碼。

GitHub 倉庫地址:

https://github.com/Yuuz12/dsh-webui-auth

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

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

小夜