# 8800 到 9119 的本机授权 本机 Web 安装不再要求预先配置 9119 用户名密码,也不生成或写入 Dashboard 账号。 8800 的用户登录、权限、CSRF、设备 scope 与 HTTP+SSE 接口保持不变。 ## 自动选择授权方式 - 目标是字面回环地址 `127.0.0.1` 或 `::1`,且 `/api/status` 明确声明 `auth_required=false`:取得 Hermes 首页提供的原生临时会话令牌,验证后仅保存在服务端内存。REST 使用 `X-Hermes-Session-Token`,仅内部上游 WebSocket 使用 Hermes 规定的 `token` 参数。 - 上游声明需要账号鉴权:继续使用管理员保存的独立服务账号和 Cookie;WebSocket 使用一次性 ticket。即使目标是 127.0.0.1,也不会绕过账号门禁。 - 远程上游声明免账号:拒绝连接。`localhost`、Docker 别名、局域网 IP、DNS 解析结果、客户端地址和转发头不作为回环免账号授权依据。 真实回环请求使用直接 HTTP/HTTPS agent,不走环境变量代理,不跟随重定向;令牌不放入下游 URL、不写磁盘、不输出日志或返回浏览器/iOS。服务重启后令牌轮换,REST 401 或新 WebSocket 连接会重新验证并合并刷新;超时和 5xx 不自动重放命令。 ## 安装与已有部署 仅配置为 `http://127.0.0.1:9119` 的受管实例会启动本机 Dashboard。9119 未运行时,以 `--host 127.0.0.1` 启动;已运行则保持不变,不自动删除已有账号、重启、修改监听或放宽认证。8800 仍是客户端唯一入口。 已有 LAN 监听或 `dashboard.public_url` 等设置可能使 Hermes 继续要求账号鉴权;这种情况下需要服务账号,不能仅凭“客户端与服务在同一台机器”免密。Docker 桥接访问宿主机也不属于本容器回环;维持远程账号鉴权。 本机令牌是服务端授权,不是可分发的设备凭据。现有子节点配对仍使用独立、可撤销的上游会话;不会复制或提升为本机服务令牌。普通 iOS/Web 账号登录 8800 不受此限制。 本次不会修改 9119 源码或现有配置,旧客户端 WebSocket 入口仍不兼容。 ## 回归验证 `npm test` 包含本机令牌、账号门禁、代理/重定向、令牌轮换、CSRF 与监督器测试。 `npm run test:e2e` 使用账号鉴权模拟上游;`FAKE_HERMES_LOCAL_AUTH=1 npm run test:e2e` 对同一组浏览器流程使用无账号、强制原生令牌的模拟上游。运行前确保 18801/19119 未被其他测试实例占用,避免复用到错误授权模式;这些端口与实际 8800/9119 无关。