前言¶
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。