前言¶
DeepSeek Harness (DSH) 的 Web 界面在生产环境中需要额外的安全防护。现有的登录门方案往往较为复杂或依赖繁重。dsh-simple-auth 提供了一个直接的替代方案:通过共享密钥或主/访客密钥进行访问控制,并支持基于 ACL 的会话隔离与分享。
插件简介¶
dsh-simple-auth 是由 lt9 维护的一个 DeepSeek Harness Web 插件。它是一个超轻量登录网关,核心设计理念是零生产依赖。
该插件提供单登录字段,支持可选的“主密钥”或“访客密钥”。默认情况下,会话是隔离的;只有“所有者”可以分享或取消分享会话。侧边栏列表经过 ACL 过滤,右下角提供一个浮动操作按钮 (FAB) 专门用于分享当前选中的会话。
安装与启用¶
使用 DSH 的插件管理器添加该插件:
dsh plugin --profile web add github:lt9/dsh-simple-auth
如果当前 profile 是 pnpm workspace,且添加时遇到 ERR_PNPM_ADDING_TO_ROOT 错误,请使用 -w 参数:
dsh plugin --profile web add -w github:lt9/dsh-simple-auth
本地检出安装:
dsh plugin --profile web add ./dsh-simple-auth
启用前必须设置密钥。插件采用“故障关闭”策略:如果密钥缺失,登录页面会提示,且所有其他请求将被拒绝。
export DSH_SIMPLE_AUTH_KEY='a-long-random-secret'
在 systemd 或 Docker 服务中,请将同样的变量放入 Environment 或 EnvironmentFile。如果需要复用已有的环境变量,可在配置中指定 keyEnv:
# $DSH_HOME/cordis.patch.yml
- id: dsh-simple-auth
config:
keyEnv: EXISTING_SECRET_ENV
重启 DSH Web 进程后,打开 UI 并输入密钥即可。
配置项¶
以下为已核实的配置项。所有密钥均为可选,默认值由代码提供。在 cordis.patch.yml 中配置时,home-layer patch 的 config 会完全替换默认配置,不支持深度合并。
| 配置项 | 默认值 | 说明 |
|---|---|---|
keyEnv |
DSH_SIMPLE_AUTH_KEY |
存储访问密钥的环境变量名 |
keyFile |
"" |
如果设置,从该文件读取密钥(去除首尾空白),优先级高于 keyEnv |
cookieName |
dsh_simple_auth |
Session Cookie 名称 |
sessionTtl |
604800 |
Cookie 有效期(秒),默认为 7 天 |
cookieSecure |
auto |
auto 会跟随 X-Forwarded-Proto;true 或 false 强制设置 Secure 标志 |
rewriteLoopback |
true |
将认证后的流量重写为 127.0.0.1:<port>,避免 DSH 的反向代理 Host 检查阻断特权 API |
title |
DeepSeek Harness |
登录页面的标题 |
remember |
true |
显示“记住密钥在本设备”选项(仅存储于 localStorage,服务端仍使用 Cookie) |
rpcMinTimeoutMs |
120000 |
注入到 Web Index 的 AbortSignal.timeout 下限。默认 DSH RPC 为 30s,大页面可能中断,设为 0 可禁用 |
安全与注意事项¶
- 故障关闭:配置错误不会导致界面暴露。如果密钥缺失或配置错误,所有请求将被拒绝。
- 速率限制:针对每个客户端 IP 进行登录尝试的速率限制。
- 会话分享机制:分享会话意味着分享“实时智能体”,而非仅分享聊天文本。这意味着凭证、bash、工作区和设置仍然保持机器级别的共享。
- 非 TLS 替代品:此插件仅做访问控制,不能替代 TLS 或将智能体视为远程代码执行来处理。请勿在公网明文暴露 DSH。
- 目录清单:Catalog 中的列出仅用于展示,不是安全审计。