← 返回列表
未验证
为 Web UI 加登录墙并反向代理,让团队安全共用实例
尚未跑自动兼容性验证,可查看页面内的依赖与入口分析。 · 最近上游提交 2026/8/18 · 已提供中文文档
DeepSeek Harness (dsh) Web UI 的团队访问 —— 登录墙 + HTTP/WebSocket 反向代理。零依赖。
综合分
27.8
GitHub 分
27.8
用户评分
—
★ Stars
1
周下载量
—
安装插件(需先安装 dsh CLI 引擎:npm install -g @deepseek-ai/dsh)
dsh plugin --profile web add frozo-ai/dsh-teams该插件未发布到 npm,走 GitHub 源安装(pnpm 若拦截 prepare 脚本,按其提示在 pnpm-workspace.yaml 的 allowBuilds 中放行后重跑)
数据截至 2026/9/16(元数据每日更新 · 实装验证按队列轮转,单条结论的验证时间见上方)
用户评分
还没有人投票,来当第一个
订阅周报,不错过优质插件更新
每周一封 · 高评分插件 + 新用户活动
README
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 无关联。
扫码进群