WebUI authentication
WebUI identity authentication: HTTP/transport layer forced login (resource, plug-in bundle, /api, WebSocket four-layer protection), server session + HttpOnly Cookie.
Project overview
DSH WebUI 身份认证插件(持久化插件)。在「设置 → 身份认证」或首次访问登录页创建账号密码后,未认证的浏览器无法加载 WebUI 的任何资源、调用任何接口或建立任何实时连接——认证在 HTTP/传输层强制执行,不可通过浏览器开发者工具绕过。 架构
认证由四层组成: 层 · 机制 · 未认证行为 层: WebUI 资源(index.html、/assets/、SPA 路由) · 机制: 插件注册 prefix '' 兜底路由,校验会话后转交 frontend-static · 未认证行为: 302 → 登录页 层: 插件 bundle(/plugins/) · 机制: dsh-client-modules 补丁:serveBundle 前校验 webServer.webuiAuthGate · 未认证行为: 302 → 登录页 层: /api RPC 接口 · 机制: dsh-client-connection 补丁:路由前校验同一闸门 · 未认证行为: 401 层: WebSocket(/api/events.mux、/api/events.host) · 机制: 同包补丁:升级握手前校验同一闸门 · 未认证行为: 403 拒绝升级
登录页与「设置 → 身份认证」设置页都跟随 DSH 自带的外观设置(设置 → 通用 → 外观:浅色 / 深色 / 跟随系统),不提供独立的外观开关。设置页运行在 WebUI 内,直接消费 DSH 的主题 token,天然随明暗切换;登录页是独立页面,由服务端读取当前外观偏好(settings ui-theme.preference)注入页面,并复刻 DSH 的 boot 逻辑:跟随系统 时按 prefers-color-scheme 解析、系统明暗切换时实时变化。登录页响应带 cache-control: no-store,外观变更后刷新即可生效。 升级 DSH 后的操作流程