dsh-auth-gate:給 DSH web 實例加一道登錄門

前言

DSH 的插件生態強調「一切皆插件」;社區目錄是獨立站點,與 DeepSeek / 幻方無官方從屬關係。dsh-auth-gate 是這個生態裏的一個認證插件,目標很具體:給 DSH web 實例增加一道登錄門,使頁面、API 調用和 WebSocket 連接都需要有效會話。

它適合需要把 dsh web 實例開放給瀏覽器用戶和腳本調用的場景。經過這個插件後,未登錄的瀏覽器訪問會看到登錄頁,腳本請求則需要顯式攜帶令牌或會話憑據。

這是什麼

dsh-auth-gate 是 DSH web 實例的登錄門插件。

倉庫地址爲 https://github.com/TecFancy/dsh-auth-gate。已抓取資料沒有單獨的 author / maintainer 字段,因此本文只把地址中的 TecFancy 作爲 owner 線索,不把它當成正式維護者聲明。

資料中可見的基礎信息包括:

  • 許可證:MIT。
  • 運行環境要求:Node >=22.19.0
  • package.json 聲明瞭兩個 bin:dsh-authdsh-auth-proxy。已覈實資料詳細列出的是 dsh-auth 的用戶管理命令。

核心能力

統一攔截頁面、API 和 WebSocket

dsh-auth-gate 的核心行爲是:頁面、API 調用和 WebSocket 連接都需要有效會話。沒有有效會話的訪問會被擋下,瀏覽器側可走登錄頁,腳本或 curl 請求則需要使用 Authorization: Bearer <token> 跳過登錄頁。

兩種認證模式

插件支持兩種認證模式:

  1. 密碼認證:使用用戶名和口令。
  2. 共享令牌認證:使用一個共享密鑰。

默認掛載配置爲 mode: token,共享密鑰使用 DSH_AUTH_TOKEN 環境變量保存。

可選 TOTP 兩步認證

密碼模式下支持可選的 TOTP 兩步認證,遵循 RFC 6238。totp 可配置爲 offoptionalrequired

啓用某個用戶的 TOTP 後,登錄時需要額外輸入驗證碼。驗證碼每 30 秒變化,並允許前後窗口容差。

默認安全策略

已覈實資料中列出的默認安全策略包括:

  • 口令以哈希存儲。
  • 登錄嘗試會受限速。
  • 會話 cookie 使用 secure 設置。
  • 配置缺失或損壞時會阻止訪問,而不是靜默放行。

用戶管理 CLI

插件提供 dsh-auth CLI,用於:

  • 添加用戶。
  • 列出用戶。
  • 禁用用戶。
  • 啓用或禁用 TOTP。

安裝與啓用

先安裝插件到 web profile:

dsh plugin --profile web add dsh-auth-gate

這個命令會把插件安裝到對應 profile 中。安裝後,CLI 不直接加入 PATH,需要通過 profile 調用。

如果啓用密碼模式,先創建管理員賬戶。示例中通過 pnpm --dir 進入 web profile 目錄執行 dsh-auth

printf '%s\n' 'choose-a-strong-password' | pnpm --dir "$DSH_HOME/profiles/web" exec dsh-auth user add admin --password-stdin

接着在 $DSH_HOME/cordis.patch.yml 中覆蓋掛載配置。下面示例只覆蓋 modetotpcookieSecure

- id: dsh-auth-gate
  config:
    mode: password
    totp: optional
    cookieSecure: true

經過上面的步驟後,訪問 DSH web 實例時會進入登錄門。默認 cookieSecure: true 適合 HTTPS 環境;只有在普通 http 測試時才考慮將其設爲 false

配置項

已覈實資料列出以下配置項:

配置項 說明
mode 認證模式。默認掛載配置爲 token,也可配置爲 password
totp 密碼模式下的 TOTP 策略,可配置爲 offoptionalrequired
sessionTtl 登錄會話有效期,單位爲秒。默認爲 604800
cookieName 會話 cookie 名稱。
tokenRef 令牌模式下引用的環境變量。默認掛載配置使用 DSH_AUTH_TOKEN
cookieSecure 會話 cookie 的 secure 設置。默認爲 true,僅普通 http 測試時才考慮設爲 false
usersFile 密碼模式下的用戶列表文件位置。資料說明默認爲 $DSH_HOME/auth/users.yaml
logoutOrder 控制 Settings → General 中 Sign out 按鈕的槽位順序,數值越大越靠下。

典型用法

管理用戶

資料中列出的用戶管理命令包括:

dsh-auth user add admin --password-stdin
dsh-auth user list
dsh-auth user disable admin
dsh-auth user totp enable admin
dsh-auth user totp disable admin

如果插件是通過 dsh plugin --profile web add dsh-auth-gate 安裝到 profile 中,可以按 profile 調用,例如:

pnpm --dir "$DSH_HOME/profiles/web" exec dsh-auth user list

啓用 TOTP

爲某個用戶啓用 TOTP:

dsh-auth user totp enable admin

命令會輸出 TOTP secret 或 otpauth:// URI。將該 secret 或 URI 添加到驗證器應用後,用戶即可在密碼模式下使用驗證碼登錄。

腳本請求

腳本或 curl 請求可以攜帶 Bearer token 跳過登錄頁:

Authorization: Bearer <token>

適用場景與注意

適合以下場景:

  • DSH web 實例需要對外提供服務,但頁面、API 和 WebSocket 都需要登錄校驗。
  • 瀏覽器用戶走登錄頁,自動化腳本走 Bearer token。
  • 密碼模式下需要管理多個用戶,並對部分或全部用戶啓用 TOTP。

注意以下事項:

  • 該插件會以當前 DSH 進程權限運行,安裝前應檢查源碼和許可證。本插件許可證爲 MIT。
  • 共享令牌模式下,DSH_AUTH_TOKEN 是敏感憑據,應避免寫入倉庫或日誌。
  • cookieSecure 默認爲 true,僅在普通 http 測試時才考慮關閉。
  • 配置缺失或損壞時會阻止訪問,這是預期行爲,不是靜默放行。
  • TOTP 驗證碼每 30 秒變化,並允許前後窗口容差。

相關鏈接

GitHub 倉庫:https://github.com/TecFancy/dsh-auth-gate

如需在 DSH 社區目錄中查找,可在獨立目錄站點中檢索 dsh-auth-gate

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

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

小夜