返回目录

dsh-ui-auth

精选清单收录维护状态: 活跃

0qwq0/dsh-ui-auth

DeepSeek Harness Web UI 认证网关插件:登录门禁、用户管理、管理员专属模型/Key 配置、数据隔离 · Authentication gate for the DeepSeek Harness Web UI: login gate, user management, admin-only model/API-key config, data isolation

前往 GitHub
$ dsh plugin --profile web add dsh-ui-auth

14

星标

6

Fork

JavaScript

语言

MIT

许可证

2026-08-23

创建于

2026-10-16

最近推送

MIT 许可的原生 dsh bundle:在 DSH 路由分发之前包装其 HTTP 服务器——未登录时 302 / 401 / 断开 WS 升级——并提供 TOTP、通行密钥、邀请码注册,以及按用户的会话、工作区与模型密钥隔离。

DSH 适配

原生运行时

作者声明

安全审计

未审计

最后核验

2026-11-10

许可证

MIT

01它能帮你完成什么?

  • 给要暴露到内网或公网的 DeepSeek Harness Web UI 加一道用户名 / 密码登录门

    登录页与会话 Cookie;未登录时页面请求 302 跳登录页、API 返回 401、WS 升级直接断开

    把 DSH 面板暴露到 localhost 之外、需要在面板本身之前加一层认证的运维者

  • 让同一套 DSH 部署上的多个使用者互相看不到对方的会话、工作区与模型 Key

    会话与工作区按登录用户记录归属(访问他人对象返回 403)、模型 provider/Key 按用户隔离并用口令派生密钥信封加密、管理员分享的 Key 可选用但看不到明文

    共用一台 DeepSeek Harness 的团队或家庭,需要按账号隔离而不是共用一个登录

02如何接入 DeepSeek Harness?

前置条件

  • web profile 里的 DSH `>=0.2.0-rc.2 <0.3.0`——v0.7.0 移除了 legacy `0.1.1-rc.2` 传输线,缺少现代传输能力时插件 fail-closed
  • Node.js `^22.19.0 || >=24.0.0`(与 DSH 一致)
  • 要用通行密钥需支持 WebAuthn 的现代浏览器,并且访问地址是 `http://localhost:3080` 或域名 + HTTPS——IP 地址不能作为 RP ID

安装步骤

  1. 01

    从 npm 安装:`dsh plugin --profile web add dsh-ui-auth`

    $ dsh plugin --profile web add dsh-ui-auth

  2. 02

    或固定到某个 GitHub 发行版本:`dsh plugin --profile web add github:0QwQ0/dsh-ui-auth#v0.7.0`

    $ dsh plugin --profile web add github:0QwQ0/dsh-ui-auth#v0.7.0

  3. 03

    或从本地目录安装:`dsh plugin --profile web add <本插件目录的绝对路径>`

    $ dsh plugin --profile web add <本插件目录的绝对路径>

  4. 04

    重启一次面板——bundle 层在启动时应用

验证接入成功

  • 打开面板:会跳转到 `/auth/login`
  • 用 `admin` 与随机密码登录;密码同时输出在面板控制台日志(以 `[dsh-ui-auth]` 开头)与面板进程工作目录下的 `dsh-ui-auth-bootstrap.txt`

回滚

  • `dsh plugin --profile web remove dsh-ui-auth` 后重启面板;网关、设置面板与客户端模块全部消失,profile 的依赖与 bundle 名单自动还原
  • 卸载不会删除账号数据;如需一并清空,按 README 的重置步骤操作

03DSH 适配与能力边界

DSH 适配原生运行时

原生 dsh profile bundle:包内声明了 `dsh.bundle.patch` 与 `dsh.client`,`dsh plugin` 会自动把它加入 profile 的 bundle 名单。它在 DSH 路由分发之前包装其 HTTP 服务器,拦截 `/api/*`、`/plugins/*`、HMR、SPA fallback 与 WebSocket 升级通道。

  • 全接口拦截

    任何到达 DSH 的 HTTP 请求或 WebSocket 升级→未登录时页面 302、API 401、WS 升级断开;登录后原请求原样透传

  • TOTP 两步验证与通行密钥

    验证器 App(RFC 6238)或 WebAuthn 凭据→“密码 + 动态码”登录,或用通行密钥免密登录;一个账号可绑定多个通行密钥

    私钥永不离开用户设备,服务器只保存公钥
  • 按用户隔离的模型密钥

    每个用户在【设置】→【模型】里自己的 provider / 模型 / API Key→带掩码 Key 与余额的表格;私有 Key 用口令派生密钥加密,未解锁时服务端无法解密

    查余额需先解锁管理员分享的配置可选用、可看余额但看不到 Key,撤销立即失效
  • WebSocket mux 透明代理与逐帧过滤

    已登录客户端发起的 `/api/remote.mux` 升级→透明代理:他人的 `baseline.items`、`upsert.workspace`、`order.workspaceIds` 与会话事件被丢弃或裁剪,自己的原样转发

    `DSH_AUTH_MUX_PROXY=0` 可临时退避为直通用于排障,但会重现泄漏
  • 中英双语登录 / 注册界面

    DSH 的语言设置或浏览器的 `Accept-Language`→中文 / English 的登录、注册与注册引导页,跟随 DSH 的 locale 服务即时切换

04适合谁?何时不该用?

适合

  • 把 DSH 面板暴露到 localhost 之外、需要在面板本身之前加一层认证的运维者
  • 共用一台 DeepSeek Harness 的团队或家庭,需要按账号隔离而不是共用一个登录

不适合

  • v0.7.0 只支持 DSH 0.2.0 线。缺少现代传输能力时插件 fail-closed——认证网关不建立、面板不可访问——而不会退回旧传输线,也不会降级成无门放行。
  • 浏览器不允许把 IP 地址当作通行密钥域:`http://127.0.0.1:3080` 与 `http://内网IP:3080` 都无法使用通行密钥。本机请用 `http://localhost:3080`,或给面板配域名并走 HTTPS。
  • 隔离范围是 DSH 的会话/工作区数据按登录用户划分;它不改变 DSH 自身的进程权限模型,也不能隔离第三方插件自己的数据。多租户级别的强隔离需要 DSH 侧的支持。

05兼容性、维护与安全提示

  • v0.7.0 只支持 DSH 0.2.0 线。缺少现代传输能力时插件 fail-closed——认证网关不建立、面板不可访问——而不会退回旧传输线,也不会降级成无门放行。
  • 浏览器不允许把 IP 地址当作通行密钥域:`http://127.0.0.1:3080` 与 `http://内网IP:3080` 都无法使用通行密钥。本机请用 `http://localhost:3080`,或给面板配域名并走 HTTPS。
  • 隔离范围是 DSH 的会话/工作区数据按登录用户划分;它不改变 DSH 自身的进程权限模型,也不能隔离第三方插件自己的数据。多租户级别的强隔离需要 DSH 侧的支持。
  • 公网部署应放在 HTTPS 反向代理之后,由代理终结 TLS 并保留 Host,并在反代场景开启 `DSH_AUTH_TRUST_PROXY=1`,否则登录限流会按代理 IP 聚合。
  • 首次启动会生成含管理员随机密码的 `dsh-ui-auth-bootstrap.txt`。README 要求用完即删,且任意用户改密成功后该引导文件会自动删除。
2026-08-232026-10-16v0.7.1

MIT · 持续维护(最新 release v0.7.1,2026-10-16)· legacy DSH 0.1.1-rc.2 支持已于 v0.7.0 结束

06常见问题

v0.7.x 支持哪些 DSH 版本?

web profile 里的 DSH `>=0.2.0-rc.2 <0.3.0`。legacy `0.1.1-rc.2` 传输线已在 v0.7.0 移除:缺少现代传输能力时插件 fail-closed——认证网关不建立、面板不可访问——而不是无门放行。

第一次怎么登录?

用户表为空时插件会自动创建 `admin` 并生成随机密码,同时输出在面板控制台日志(以 `[dsh-ui-auth]` 开头)与面板进程工作目录下的 `dsh-ui-auth-bootstrap.txt`。打开面板会跳转到 `/auth/login`,登录后请立刻在【设置】→【用户管理】改密码,引导文件也会随之删除。

为什么在内网 IP 上用不了通行密钥?

浏览器不允许把 IP 地址当作 WebAuthn 的 RP ID,明文 HTTP 也不是安全上下文。本机请用 `http://localhost:3080`,或给面板配域名并走 HTTPS。

普通用户能看到别人的会话吗?

不能。会话与工作区在创建时记录归属,列表与搜索接口按属主过滤,直连他人会话返回 403,`/api/remote.mux` 的 WebSocket 由插件透明代理并逐帧过滤。管理员可见全部数据。

它会改变 DSH 自身的权限模型吗?

不会。它按登录用户隔离 DSH 的会话/工作区数据,但不改变 DSH 的进程权限模型,也不能隔离第三方插件自己的数据。DSH 对 `/api` 的 DNS-rebinding 信任栅栏明确不是认证——本插件才是前置认证层。

08数据与来源

  • 作者声明github.com6c5e87b44be4…

    本包是标准的 DSH profile bundle(声明了 `dsh.bundle.patch` 与 `dsh.client`), `dsh plugin` 会自动把它加入 profile 的 bundle 名单:

  • 作者声明github.com6c5e87b44be4…

    在 DSH 路由分发之前包装其 HTTP 服务器,覆盖 `/api/*`、`/plugins/*`、HMR、 SPA fallback 与 WebSocket 升级通道,没有旁路。

页面基于项目公开文档、仓库元数据和 DSH Plugins 的结构化解析生成;最后核验于 2026-11-10。发现错误?提交更正。

🏆

最佳 DeepSeek Harness 插件

从全目录挑出的 12 个值得优先安装的插件,覆盖各个分类。

DSH Plugins 是独立的 DeepSeek Harness 插件目录,与 DeepSeek 官方无关,也不代表官方背书。第三方插件未经安全审计,安装前请审查源码。

每周获取最新的 DeepSeek Harness 插件,绝不滥发。