前言¶
用 DeepSeek Harness(DSH)跑 dsh web 時,瀏覽器第一次打開控制台通常要在地址裏帶上 ?token=…,token 來自進程啓動輸出。若前面掛了 nginx 等反向代理、希望用戶直接訪問根路徑 /,就要在代理層或書籤裏想辦法把 token 塞進去,運維和分享鏈接都不順手。
@beyondandsharp/dsh-plugin-notoken 是 DSH 的 web profile 本地插件:註冊固定登錄入口路由,在服務端把進程裏的啓動 token 換成瀏覽器會話 cookie,讓「首次訪問」不必在 URL 裏帶 token。維護者爲 BeyondandSharp,在插件目錄中歸類爲 admin-security。下文按安裝、原理要點、nginx 配合與安全邊界說明可覈對的事實;安裝前請自行閱讀倉庫源碼與 MIT 許可證。
這是什麼¶
插件在 DSH web 進程內註冊一個登錄入口(默認 GET /__dsh_login)。請求經信任圍欄校驗後,用當前進程 token 完成 token → cookie 交換,後續訪問走 DSH 既有的瀏覽器會話機制,而不是長期依賴 URL 參數。
它不修改 DSH 源碼、不籤 cookie、不接觸密鑰、不解析啓動輸出;通過 cordis.patch.yml 以 bundle patch 方式掛入 web profile。
核心功能¶
- 穩定登錄入口:默認路徑
GET /__dsh_login,可在反代或書籤中固定指向該路由或經 nginx 內部改寫的等價入口。 - token 換會話:對通過信任圍欄的請求,調用進程內
authorizeIndex()邏輯,以 303 +Set-Cookie等方式完成交換;已帶會話的訪問會 303 落到./。 - 適配瀏覽器導航與 SameSite:對無會話且標籤爲 cross-site(需 DSH 側
allowCrossSiteNavigation放行)或none的文檔導航,在同一次響應中直接返回應用外殼並下發 cookie,避免 Strict cookie 在 303 鏈上出現「重定向次數過多」;same-origin / same-site 仍走 303。 - 與 nginx 反代配合:倉庫提供
examples/nginx.conf,典型做法是把裸/的 401 在服務端內部改寫到入口,地址欄可全程停在/;/api與 WebSocket 需原樣透傳。
安裝與啓用¶
在已安裝 DSH 且使用 web profile 的環境中,官方 README 給出的安裝方式如下($DSH 爲 DSH 可執行路徑或別名):
$DSH plugin --profile web add @beyondandsharp/dsh-plugin-notoken # 從 npm
# 也可以直接裝 GitHub 或本地目錄:
$DSH plugin --profile web add github:BeyondandSharp/dsh-plugin-notoken
$DSH plugin --profile web add /path/to/dsh-plugin-notoken # DSH=/path/to/dsh
npm 包名爲 @beyondandsharp/dsh-plugin-notoken,當前 package.json 中版本爲 1.0.6。插件以當前 dsh web 進程權限運行;安裝前應檢查 notoken.js 與 patch 內容是否符合你的安全策略。
典型用法¶
直連或本地調試¶
啓用插件後,瀏覽器首次可訪問默認入口 GET /__dsh_login(或你配置後的等價路徑),由插件完成 cookie 交換,再進入控制台外殼。若 dsh web 只綁定特定接口,外殼回源會使用進程監聽的真實 host:port,README 提醒:dsh web --host <地址> 只監聽該接口時,用 127.0.0.1 迴環可能 ECONNREFUSED。
與 nginx 反代¶
- 參考倉庫 examples/nginx.conf。
Host原樣透傳(cookie 綁定 Host),且該 authority 必須在 DSH 的trustedHosts中。- 只攔
location = /,不要把/api與 WebSocket 改寫進登錄入口。
經 nginx 內部改寫時,用戶地址欄可仍爲 /,而直連入口的 none 導航地址欄會停在入口路徑;兩種部署方式 README 均有說明。
原理要點(與 DSH 認證縫隙的關係)¶
DSH 在 frontend-static 渲染 index 前和 /api 路由上會做瀏覽器認證;插件註冊的具名路由在兩者之前匹配,默認不經過上述認證。本插件的入口即利用這條匹配順序:先 requestRejection() 過信任圍欄(403 拒絕;401 且無會話時放行),再取進程 token 並完成 index 授權交換。
mode: redirect 在 exchange 之前 302 到帶 token 的 URL,README 標明其爲兼容回退,不覆蓋主屏啓動場景;完全不發送 Sec-Fetch-* 的老客戶端仍走 303。
適用場景與注意¶
適合:內網或已嚴格限制網絡可達性、且 Host 已納入 DSH 信任圍欄;希望通過 nginx 提供「乾淨 URL」、又不想把啓動 token 寫進書籤或分享鏈接的部署。
不適合或需極度謹慎:任何對監聽端口可達、且 Host 能通過信任圍欄的訪問者。
README 用顯目警告說明:裝上之後,任何能訪問該端口且 Host 通過 DSH 信任圍欄的人,都相當於獲得 operator 權限——可執行工具、讀取憑據、並以運行 dsh web 的 OS 用戶身份操作本機。這不是「少輸一次 token」的便利插件,而是主動去掉瀏覽器側認證步驟;公網暴露或未做網絡隔離時不應使用。
社區插件目錄(如 skillhub.cn)與 DeepSeek / 幻方無官方從屬關係;選用插件屬於「一切皆插件」生態下的自主決策,務必以源碼與許可證爲準。
驗證與參考¶
倉庫內可用以下命令做自檢(來自 README):
node --test && bash verify/e2e.sh
- 插件目錄頁:https://www.skillhub.cn/plugins/BeyondandSharp/dsh-plugin-notoken
- 源碼與完整說明:https://github.com/BeyondandSharp/dsh-plugin-notoken
若你的場景是「反代 + 首次訪問不帶 ?token=」,且已接受上述 operator 等價暴露風險,可按 README 安裝並在 nginx 示例基礎上收緊 trustedHosts 與網絡 ACL;否則應繼續使用 DSH 默認的 URL token 或標準認證流程。