🎁 福利专区全网大模型免费应用 + 新用户福利 + 注册活动入口,低成本玩转 AI

团队访问网关 frozo-ai/dsh-teams

DeepSeek Harness
frozo-ai78 天前有提交已提供中文文档扫描:含敏感能力

为 Web UI 加登录墙并反向代理,让团队安全共用实例

27.8/100
综合分
1
GitHub 星标
—
npm 周下载
—/5
用户评分

数据截至 2026/9/16 · 周下载取自 npm 全网(含 CI / 镜像),非本站安装数;综合分由星标、活跃度与兼容性检查合成。

安装命令 · 需先装 dsh CLI 引擎
dsh plugin --profile web add frozo-ai/dsh-teams
该包不可直接 npm 安装,改从 GitHub 源安装(明细见下方安装检查)

状态速览

判定依据:实装验证 · 静态安装检查 · 自动扫描 · 仓库维护状态
信任档位:已验证
是什么[目录]—
dsh 原生插件 · ui
暂无时间戳·判据 →
装得上吗[实装验证]✓
本站已真实安装成功
非静态推断
L4 · 真实安装等级说明 →
数据截至 2026/09/26·判据 →
安全吗[自动扫描]—
本站尚未对该插件做风险分级
暂未覆盖,不等同于无风险
数据截至 2026/11/03·判据 →
还在维护吗[仓库]—
更新放缓:最近一次提交在 78 天前
暂无时间戳·判据 →
图例:✓ 通过! 需注意— 未判定 / 无数据· 「未判定」= 本站尚无数据,不代表插件有问题
档位由哪些信号合成

本站实装验证(真实安装 L4 覆盖全站;L5 为运行时冒烟或实机截图,覆盖范围小于 L4) · 验证所用 dsh 版本 · 静态安装检查 · 风险分级 · 仓库维护状态。 下方各区块是它的证据明细。

验证判据与等级说明 →

可信度证据

安全扫描自动 · 静态分析源码
v2.7.0
🔵 扫描:含敏感能力尚无人工评估
展开查看扫描说明与证据 ↓

静态扫描发现插件具备触达本地系统的能力:执行外部命令、读写/删除本地文件、读取剪贴板或密钥类环境变量(至少其一)。这是能力清单,不是危险判定——具体能力项与证据见下方,安装前请自行判断是否需要。

读写/删除本地文件读取剪贴板或密钥环境变量发起外部网络请求
查看扫描证据(共 11 处,展示前 11 条)
  • 写入本地文件
    bin/dsh-teams.mjs:12
    mkdirSync(HOME, { recursive: true })
  • 读取本地文件
    bin/dsh-teams.mjs:17
    if (!existsSync(SECRET_PATH)) {
  • 写入本地文件
    bin/dsh-teams.mjs:18
    writeFileSync(SECRET_PATH, randomBytes(32).toString('hex'), { mode: 0o600 })
  • 读取本地文件
    bin/dsh-teams.mjs:20
    return readFileSync(SECRET_PATH, 'utf8').trim()
  • 读取密钥环境变量
    bin/dsh-teams.mjs:46
    clientSecret: process.env.DSH_TEAMS_OIDC_CLIENT_SECRET,
  • 读取本地文件
    src/auth.mjs:30
    if (!existsSync(this.path)) return {}
  • 读取本地文件
    src/auth.mjs:31
    return JSON.parse(readFileSync(this.path, 'utf8'))
  • 写入本地文件
    src/auth.mjs:34
    writeFileSync(this.path, JSON.stringify(users, null, 2) + '\n', { mode: 0o600 })
  • 发起网络请求
    src/oidc.mjs:63
    const res = await fetch(url)
  • 发起网络请求
    src/oidc.mjs:73
    const res = await fetch(jwksUri)
  • 发起网络请求
    src/oidc.mjs:103
    const res = await fetch(doc.token_endpoint, { method: 'POST', headers, body })
扫描于 2026/11/3(1 天前) · 范围 入口闭包 + 发布文件清单 · 来源 GitHub 仓库

静态扫描只反映源码中出现的调用,不构成安全背书;人工评估与自动扫描相互独立、互不覆盖。

社区实装还没有人打卡 · 装过的第一个就是你
给这个插件打分还没有人投票↓
用户评分
还没有人投票,来当第一个

功能亮点

  • 登录墙保护
  • 团队共用实例

README

由 DeepSeek 最新模型翻译生成
dsh-teams 为 DeepSeek Harness Web UI 提供团队访问控制。 dsh Web 服务器不附带 TLS、认证或来源策略——这是有意排除在范围之外的。对于回环地址上的开发工具来说这是正确的,但当你想要让团队共用一个实例时,这就成了问题。 dsh-teams 是一个零依赖的认证网关:一个登录墙,外加一个完整的 HTTP 和 WebSocket 反向代理,置于绑定到回环地址的 dsh web 前面。你的 dsh 保持在 127.0.0.1 上;网关是唯一对外暴露的东西。 browser ──> dsh-teams :3081 (auth wall) ──> dsh web 127.0.0.1:3080 快速开始 1. 像往常一样运行 dsh(默认绑定到回环地址) npx @deepseek-ai/dsh web 2. 创建一个用户并启动网关 npx dsh-teams add-user alice npx dsh-teams start # http://0.0.0.0:3081 -> 127.0.0.1:3080 让你的团队访问 http://:3081。未认证的请求——包括 WebSocket 升级——会得到登录页面;已认证的请求则原样代理转发。
展开完整文档(README 剩余 1 节)
dsh-teams

为 DeepSeek Harness Web UI 提供团队访问控制。

dsh Web 服务器不附带 TLS、认证或来源策略——这是有意排除在范围之外的。对于回环地址上的开发工具来说这是正确的,但当你想要让团队共用一个实例时,这就成了问题。

dsh-teams 是一个零依赖的认证网关:一个登录墙,外加一个完整的 HTTP 和 WebSocket 反向代理,置于绑定到回环地址的 dsh web 前面。你的 dsh 保持在 127.0.0.1 上;网关是唯一对外暴露的东西。

browser ──> dsh-teams :3081 (auth wall) ──> dsh web 127.0.0.1:3080

快速开始

1. 像往常一样运行 dsh(默认绑定到回环地址)
npx @deepseek-ai/dsh web

2. 创建一个用户并启动网关
npx dsh-teams add-user alice
npx dsh-teams start # http://0.0.0.0:3081 -> 127.0.0.1:3080

让你的团队访问 http://:3081。未认证的请求——包括 WebSocket 升级——会得到登录页面;已认证的请求则原样代理转发。

功能

- 对每个 HTTP 路由和 WebSocket 升级都设有登录墙
- scrypt 密码哈希、HMAC 签名的 HttpOnly cookie、登录速率限制(每 IP 15 分钟 10 次尝试)
- 将已认证的用户名作为 x-dsh-teams-user 转发到上游(用于审计 / 未来的按用户路由)
- 零 npm 依赖——node:http、node:net、node:crypto;由于从不触及 dsh 内部实现,因此能经受 dsh rc 的变动

CLI

dsh-teams add-user [password] 创建用户(省略密码时会提示输入) dsh-teams start [port] 启动网关(默认 3081) dsh-teams remove-user dsh-teams list-users

环境变量:DSH_TEAMS_PORT、DSH_TEAMS_HOST、DSH_UPSTREAM_HOST、DSH_UPSTREAM_PORT、DSH_TEAMS_HOME(默认 ~/.dsh-teams)。

SSO(OIDC)

使用 Google Workspace、Okta、Azure AD、Auth0 登录——任何支持 OIDC 的服务均可。
授权码 + PKCE,并带有完整的 ID token 验证:针对签发者 JWKS 的 RS256 签名验证,外加 iss / aud / exp / nonce。state 是一次性的, 10 分钟后过期。

export DSH_TEAMS_OIDC_ISSUER=https://accounts.google.com
export DSH_TEAMS_OIDC_CLIENT_ID=xxx.apps.googleusercontent.com
export DSH_TEAMS_OIDC_CLIENT_SECRET=xxx # 公共客户端可省略
export DSH_TEAMS_OIDC_REDIRECT_URI=https://your.host/__teams/sso/callback
export DSH_TEAMS_OIDC_ALLOWED_DOMAINS=corp.example
export DSH_TEAMS_OIDC_LABEL=Google
dsh-teams start

没有允许列表时它会拒绝启动。 ALLOWED_DOMAINS 或 ALLOWED_EMAILS 是必需的:对于像 Google 这样的公共签发者,没有允许列表意味着地球上任何 Google 账号都能登录。故意采用失败即关闭的策略。

密码登录与 SSO 并行可用,因此你可以保留一个应急用的本地账号。

已针对一个签署真实 RS256 token 的测试 IdP 进行验证。该测试套件会拒绝:被篡改的载荷、错误密钥签名、签发者/受众不匹配、过期令牌、nonce 重放、alg=none 降级、未验证的邮箱、不在允许列表中的域名、伪造的 state,以及 state 重放。

为什么要剥离 Origin

dsh 的 API 会对任何携带 Origin 头的请求返回 403——它假定仅限回环访问,在这种情况下浏览器在同源请求中会省略 Origin。在任何代理前置之后,浏览器就会开始发送它,于是每次 /api 调用都会返回 403,而静态资源仍然能加载,UI 只渲染出一半(缺少编辑器、文本无样式)。因此网关会剥离 Origin/Referer 并将 Host 重写为上游,同时将原始值保留为 x-forwarded-host。

安全说明

- 对于任何超出受信任局域网范围的场景,都要在 TLS(Caddy/nginx/Cloudflare Tunnel)之后运行——在纯 HTTP 下 cookie 不是 Secure 的。
- 所有已认证用户共享同一个 dsh 实例,并看到相同的会话/工作区。按用户隔离的实例是下一个里程碑(见下文)。
- 会话存储在内存中:重启网关会让所有人登出。

路线图

- [ ] 按用户隔离的 dsh 实例——每个用户一个进程 + DSH_HOME,网关按身份路由(真正的隔离)
- [ ] OIDC / SSO 登录(Google、GitHub、Okta)
- [ ] 角色与按用户的工作区允许列表
- [ ] 按用户的使用配额
- [ ] 记录谁运行了什么的审计日志

测试

npm test # 6 项检查的冒烟测试:墙、错误登录、登录、代理、篡改、登出

MIT。与 DeepSeek AI 无关联。
预览分享卡片长什么样 ↓frozo-ai/dsh-teams
分享 · DeepSeek Harness Hub
frozo-ai/dsh-teams

为 Web UI 加登录墙并反向代理,让团队安全共用实例

这个插件是你维护的吗?
作者本人可认领并核对本条目;认领通过后,详情页会显示「作者已认领」标记。
认领条目 →
回到顶部