前言¶
DeepSeek Harness 的 Web GUI 適合本地或內部使用。當同一個 Web GUI 被多個用戶訪問時,需要解決兩個具體問題:訪問者身份從哪裏來,以及每個用戶能看到哪些 session。
dsh-lark-web-auth 面向這個場景,給 DeepSeek Harness Web GUI 增加飛書 OAuth 登錄,並按 open_id 做 session 隔離。它屬於 DSH 社區插件生態;DSH 社區目錄是獨立站點,與 DeepSeek / 幻方無官方從屬關係。
這是什麼¶
dsh-lark-web-auth 是一個 DeepSeek Harness 插件,由 Awesome-AI-Pedia 維護,許可證爲 MIT。
它的定位是:給 DeepSeek Harness Web GUI 增加飛書登錄,並讓每個用戶只能看到、訪問、修改自己的 session。
它可以獨立使用,僅做 Web 端登錄,不與飛書 bot 交互;也可以與 dsh-lark-link 配合,使飛書 bot 會話在用戶登錄網頁後自動看到。
核心功能¶
- 飛書 OAuth 登錄:未登錄用戶訪問網頁時自動跳轉飛書授權,回調後寫
httpOnlycookie。 session隔離:每個session_id歸屬一個open_id,用戶只能看到、訪問、修改自己的session。- 不泄露存在性:非 owner 請求統一返回
404。 - 登錄態持久化:使用 SQLite 存儲,進程重啓不掉線。
- 零前端源碼修改:通過
webServer.tapIndex()注入小 UI。 - 存量
session回填:首次啓動時掃描dm:*前綴的session,通過飛書 API 反查chat_id到open_id,並寫入歸屬表。 - 與
dsh-lark-link配合:使飛書 bot 會話在用戶登錄網頁後自動看到。
隔離怎麼做¶
下面按請求鏈路說明隔離方式。
1、HTTP 層:所有 /api/* 請求先過 middleware 校驗 cookie,未登錄返回 401。
2、RPC 層:typert 的 agent / session lookup 被包一層,請求上下文裏的 openId 必須等於 session_owner 表裏的記錄。
3、列表層:session.list API 返回值過濾,只保留 owner 匹配的項。
4、新 session:監聽 session/created 事件,把 request context 的 openId 寫入 session_owner;dm:* 前綴的 dsh-lark-link 會話按 chat_id 反查 open_id。
安裝與啓用¶
先安裝插件:
dsh plugin --profile web add dsh-lark-web-auth
插件以當前 dsh 進程權限運行,安裝前應檢查源碼和 MIT 許可證。
此插件必須在 api-remotes 之後加載,否則 typert lookup 覆蓋可能失效。
配置¶
需要設置以下必需環境變量:
LARK_WEB_APP_ID
LARK_WEB_APP_SECRET
LARK_WEB_BASE_URL
LARK_WEB_COOKIE_SECRET
其中 LARK_WEB_COOKIE_SECRET 需要 32+ 字節隨機串。旋轉該值會踢下所有用戶。
可選環境變量如下:
LARK_WEB_AUTH_ENABLED
LARK_WEB_DB_PATH
LARK_WEB_DOMAIN
LARK_WEB_AUTH_ENABLED=false可臨時禁用。LARK_WEB_DB_PATH默認是~/.dsh/lark-web-auth.sqlite。LARK_WEB_DOMAIN可設爲feishu或lark。
飛書開放平臺設置¶
在飛書開放平臺的自建應用中完成以下設置。
1、添加網頁主頁地址:
https://web.yourdomain.com
2、在安全設置中配置重定向 URL:
https://web.yourdomain.com/auth/lark/callback
3、在權限管理中開通:
contact:user.base:readonly
這裏的 web.yourdomain.com 是示例域名,替換爲實際公網或內網域名。
部署示例¶
下面是一個 Caddy 示例,將域名反向代理到本機 3080 端口:
web.yourdomain.com {
reverse_proxy localhost:3080
}
啓動前設置環境變量,再啓動 Web profile:
export LARK_WEB_APP_ID=cli_xxxxx
export LARK_WEB_APP_SECRET=xxxxx
export LARK_WEB_BASE_URL=https://web.yourdomain.com
export LARK_WEB_COOKIE_SECRET=$(openssl rand -base64 32)
dsh --profile web
示例中的 cli_xxxxx、xxxxx 和 web.yourdomain.com 都需要替換爲實際值。
適用場景與限制¶
這個插件適合需要飛書身份登錄 DeepSeek Harness Web GUI 的場景,也適合單機、多人隔離訪問的內部部署。
需要注意以下限制:
- 單機 SQLite 存儲,不支持多實例部署,README 稱 100 人以內足夠。
- 存量數據回填是盡力而爲。如果飛書 API 反查
chat_id到open_id失敗,該session會保留無 owner 狀態,任何人都看不到,需要手動分配。 - 不支持團隊/羣組
session共享,一個session只能屬於一個人。 - 未做審計日誌,即未記錄誰看了誰的
session。 LARK_WEB_COOKIE_SECRET旋轉後,所有用戶會被踢下線。- 插件必須在
api-remotes之後加載。
結尾¶
dsh-lark-web-auth 的價值在於:用飛書 OAuth 作爲 Web 端登錄方式,並把 DeepSeek Harness 的 session 按用戶隔離。它不改前端源碼,配置集中在環境變量,既可單獨使用,也可與 dsh-lark-link 組合使用。
GitHub 倉庫:https://github.com/Awesome-AI-Pedia/dsh-lark-web-auth
社區目錄頁 URL 未在已覈實資料中給出,可在 DSH 社區目錄搜索 dsh-lark-web-auth。