登录与初始化
首次创建管理员、浏览器会话与反向代理配置。
首次初始化
启动实例后打开页面,未初始化的数据库进入 /setup 欢迎页,点击开始进入 /setup/admin。填写管理员用户名、密码与确认密码后自动登录。无需额外初始化密钥。
先在本地完成初始化,再向团队开放服务;未完成时,能访问页面的人都可以创建第一个管理员。默认监听与 Compose 主机端口绑定 loopback。管理员创建和首个会话在同一事务提交,初始化完成后重启不会重新开放。
用户名为 3–32 个 ASCII 字母、数字、下划线或连字符,以字母或数字开头,大小写不敏感并存为小写。新密码为 8–20 个 Unicode 字符,不会自动去除空白。已有旧密码登录保留最长 128 字符兼容。
浏览器会话
会话通过 HttpOnly、SameSite=Lax Cookie 传输,SQLite 只保存随机令牌的 SHA-256 摘要。有效期 12 小时,不滑动续期,每人最多 5 个会话,新登录仅替换自己的最旧超额会话。
正常重启保留会话,退出先撤销数据库会话,再清除 Cookie。浏览器只在本地保存主题与语言偏好,不保存会话令牌。页面在聚焦与定期检查时同步会话状态,失效后回到登录。
忘记管理员密码使用 本地恢复命令,不要删除数据库。成员由管理员创建,当前没有公开注册、MFA 或邀请链接。
HTTPS 与反向代理
网络部署在反向代理终止 HTTPS,并设置浏览器实际访问的 origin:
SUBLANE_PUBLIC_URL=https://sublane.example.com后端绑定 loopback 或私有网络。浏览器写操作验证精确 origin,不会隐式信任转发的 Host、协议或来源地址头。开发时 Vite 代理必须保留 Host,使用 changeOrigin: false。
认证有进程内、按来源与全局的频率限制;反向代理后用户可能共享代理的来源预算。密码哈希最多同时执行两次。相关限制不是整个进程内存占用的保证。
认证接口
| 接口 | 作用 |
|---|---|
GET /api/auth/state | 公开读取初始化状态与当前用户 |
POST /api/auth/setup | 未初始化时创建管理员 |
POST /api/auth/login | 使用 username、password 登录 |
POST /api/auth/logout | 同源、空 JSON 请求体,撤销当前会话 |
GET /healthz、GET /readyz | 存活与就绪探针 |
管理接口默认要求管理员,明确的个人接口接受启用的两种角色并从会话获取所有者。模型网关使用独立 API 密钥,不能拿它登录管理后台。