fonlan/dsh-web-auth

fonlan★ 0TypeScript最后同步: 2026-08-18

在 GitHub 打开

DSH web plugin: password-gate authentication (login page + HttpOnly signed cookie) for exposing dsh web behind a reverse proxy

README 摘要

dsh-web-auth 为 DSH Web GUI 增加 密码访问认证 的插件:所有 HTTP 请求与 WebSocket 升级都必须携带有效会话,未登录一律跳转到登录页。装上它之后,把 dsh 反代到公网(或直接暴露端口)才不至于裸奔。 特性 - 登录页 + HttpOnly 签名 Cookie (HMAC-SHA256,7 天滑动续期),浏览器自动携带,HTTP / WebSocket / SSE / 静态资源全覆盖 - 首次设置 :未配置密码时,登录页显示「设置访问密码」表单(引导流程,见下文安全说明) - GUI 改密 :设置 → 插件 →「访问认证」卡片(插件配置 tab),需旧密码;改密后 轮换签名密钥,所有已登录会话立即下线 - 退出登录 :设置卡片按钮,或访问 /logout - 防爆破 :登录与改密接口按客户端 IP 限速(连续 5 次失败锁 1 分钟起,指数退避至 30 分钟;15 分钟内累计) - 反代友好 :Cookie Secure 自动跟随 x-forwarded-proto ;限速信任回环对端的 X-Forwarded-For - 监听地址切换 :设置卡片可一键把 dsh 的监听地址在 127.0.0.1 (仅本机)与 0.0.0.0 (所有网卡 / 局域网可访问)之间切换,热生效、无需重启进程(写入 web-auth settings 命名空间 → host 半区应用 patch → HMR 重绑 webserver) - 密码以 scrypt 加盐哈希 存储( $DSH HOME/web-auth/password.hash ,0600),永不回显、不落明文配置 安装 从 npm 安装: dsh plugin add 会把包写入 profile 的依赖与 bundle 栈( cordis.patch.yml 自动 insert 插件行,host 半区 + 浏览器半区一次挂载)。升级到新版本: 安装后 需要重启 dsh web 进程 才生效(当前会话会短暂断连重连)。 激活(首次设置密码) 重启后打开 dsh web,会被重定向到登录页: 1. 未设置过密码时,登录页显示「设置访问密码」——输入 ≥8 位 的新密码并确认 2. 设置成功后立即签发会话并跳回原页面;此后每次访问都要输密码 改密入口在 设置 → 插件 → 插件配置 → 访问认证 (需先登录)。 行为细节 场景 行为 未登录访问页面(GET/HEAD) 302 → /login?next=原路径 ,登录后跳回 未登录访问 API(POST 等) 401 JSON 反代域名下已登录访问任意路径(含 /api 、插件前缀) 改写为回环来源放行,网关特权方法与插件围栏不再 403 跨站请求(即使带 Cookie) 仍被围栏 403 拒绝 未登录 WebSocket 升级…

在 GitHub 查看完整 README →
工具/开发dsh-plugin

分类