deepseek-harness
deepseek-ai
DeepSeek Harness: Everything is a Plugin.
PROJECT TOPICS
PROJECT README
Language: 简体中文 | English
为 DeepSeek Harness Web 提供认证门禁的 Cordis 插件:密码认证 + TOTP 双因素认证 + 多层防爆破 + 会话管理,并在网关层真实拦截每一个请求(HTTP 与 WebSocket),未认证流量无法触及后端。
dsh web 本身没有任何认证层(其内置 trust fence 是可达性策略而非认证)。本插件以进程内网关形态补齐认证面:对外端口由网关独占,内部 webserver 由 bundle patch 钉在回环地址,网关是唯一入口。
/api/* 返回 401、页面类路径 302 到登录页、WebSocket 升级直接拒绝;认证通过后请求透明转发(Host/Origin 规范化,兼容内部 trust fence);dsh-auth-gateway/brute-force Cordis 事件(JSON 负载),供监控与联动;$DSH_HOME/settings.yaml 的 locale.preference),未设置偏好时跟随浏览器语言(Accept-Language),刷新即生效;首次部署的控制台提示中英对照输出;ctx.effect、webServer.tapIndex、ctx.slots)。插件已发布到 npm(dsh-auth-gateway),也可从 GitHub 或本地目录安装:
# 方式一:npm(registry 安装)
dsh plugin --profile web add dsh-auth-gateway
# 方式二:GitHub 仓库(默认分支;可用 #main、#v0.2.0 等指定 ref)
dsh plugin --profile web add github:xbzbing/dsh-auth-gateway
# 方式三:本地开发目录(file: 为安装时快照,改代码后需 remove + add 刷新)
dsh plugin --profile web add file:/path/to/dsh-auth-gateway
dsh web --dump-config # 确认 webserver 为 127.0.0.1:<内部端口>,出现 dsh-auth-gateway 行
dsh web # 打开 http://<host>:<对外端口>
插件自带 dsh.bundle patch(webserver 回环化 + 插件行),无需手写组合配置。
浏览器 ──> dsh-auth-gateway 网关(对外端口,运行在 dsh 进程内)
│ 每个请求先过认证检查(会话表 O(1))
├─ 未认证 ─> /api/*: 401 | 页面: 302 /login | WS: 拒绝
├─ 未通过 2FA ─> /otp/verify
└─ 已认证 ─> 转发(Host/Origin 改写为回环)──> dsh webserver(127.0.0.1:内部端口)
--port,内部 = 对外 + 1),远程无法绕过网关直连后端;首次部署 → 初始密码登录 → 引导(设置个人密码)→ 登录 →(可选)OTP 验证 → 会话;未完成引导或 2FA 的会话仅能访问对应验证端点。![]() 引导页(初始密码登录后) |
![]() 登录(含 2FA 验证码) |
![]() 2FA 登录成功 |
![]() OTP 设置(QR 码) |
![]() 设置菜单(含"认证设置"入口) |
![]() 认证设置面板 |
dsh web:首次部署自动生成初始密码并打印在控制台(醒目提示块);请复制备用;/otp/setup 启用 TOTP(扫码或手动输入密钥,输入验证码确认;同时生成备份代码请妥善保存);/login(已登录时显示改密表单),或经"认证设置"面板。以下字段为 bundle patch / profile patch 中 dsh-auth-gateway 行的 config(Standard Schema 校验):
| 字段 | 默认 | 含义 |
|---|---|---|
listenHost / listenPort |
0.0.0.0 / 3080 |
网关对外监听地址与端口 |
upstreamHost / upstreamPort |
127.0.0.1 / 3081 |
内部 webserver 地址与端口 |
minPasswordLength |
8 |
密码最小长度(4–128) |
requireMixedCase / requireSpecial |
true / true |
密码复杂度:大小写混合或特殊字符二选一满足 |
maxLoginFailures / lockMinutes |
5 / 5 |
密码失败锁定阈值与时长 |
maxGlobalAuthAttemptsPerMinute |
60 |
全局登录尝试速率上限 |
maxOtpAttemptsPerMinute |
10 |
单来源 OTP/备份码验证速率上限 |
otpEnabled(已废弃) |
false |
不再作为启用开关——2FA 由用户登录后在「认证设置」中绑定激活;字段保留仅为兼容旧配置 |
otpRequired |
false |
2FA 激活后强制每次登录验证(无需任何配置) |
otpIssuer / otpPeriod / otpDigits / otpWindow |
dsh-auth-gateway / 30 / 6 / 1 |
TOTP 参数(显示名、周期、位数、窗口) |
backupCodeCount / backupCodeLength |
10 / 8 |
备份代码数量与长度 |
认证状态变更(启用/禁用 OTP、修改密码)均要求完整验证:2FA 激活时禁用 OTP 需当前密码 + 验证码或备份代码;未完成 2FA 的会话不能访问敏感端点。OTP 验证防重放(记录已接受时间步)、防伪造(x-forwarded-for 不计入来源)。完整威胁模型、已知限制与恢复路径见 docs/SECURITY.md。
先运行插件自带的凭据命令,再 remove——dsh plugin remove 会移除 profile 里的插件依赖,其 bin(dsh-auth-gateway-reset / dsh-auth-gateway-uninstall)随之失效,命令不可再用。
# 忘记密码:重置密码记录(2FA 绑定保留;丢失认证器时需再删 otp.json)
~/.dsh/profiles/web/node_modules/.bin/dsh-auth-gateway-reset
# 或彻底清理全部凭据(密码 + OTP 密钥 + 备份码)
~/.dsh/profiles/web/node_modules/.bin/dsh-auth-gateway-uninstall
# 凭据清理完成后再移除插件(remove 只移组合,不清理数据)
dsh plugin --profile web remove dsh-auth-gateway
reset 只删 $DSH_HOME/auth-gate/password.json($DSH_HOME 默认 ~/.dsh):重启 dsh web 后新初始密码打印到控制台,登录走引导重新设置;uninstall 删除整个 auth-gate/ 目录(密码 + OTP 密钥 + 备份码);node_modules/.bin,默认不在 PATH 上,可用完整路径或 export PATH="$HOME/.dsh/profiles/web/node_modules/.bin:$PATH" 后直接调用;详见 docs/DEPLOYMENT.md。| 文档 | 内容 |
|---|---|
| docs/SECURITY.md | 威胁模型、OTP 安全设计、已知限制与恢复路径 |
| docs/DEPLOYMENT.md | 端口与监听、LAN 部署、HTTPS 建议、故障排查 |
| docs/TESTING.md | 单元测试、端到端(Playwright)、API/WebSocket 门禁验证 |
| docs/DEVELOPMENT.md | 架构说明、构建、开发统计 |
npm test(88 项,含 OTP 安全回归、client 契约、patch 端口推导)node scripts/e2e.mjs(Playwright,登录/2FA/改密全流程)./scripts/verify.sh(curl,401/302/WS 拒绝/锁定)详见 docs/TESTING.md。
None,本包是浏览器与内部 dsh webserver 之间的认证载体,不会进入任何模型请求。
None;本包既不组装也不发送 provider 请求。
MIT
CLASSIFICATION EVIDENCE
系统优先读取 GitHub Topics,再与站内分类词典和词根规则比对。当前命中: 无有效分类标签。