SubLaneSubLane

登录与初始化

首次创建管理员、浏览器会话与反向代理配置。

首次初始化

启动实例后打开页面,未初始化的数据库进入 /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使用 usernamepassword 登录
POST /api/auth/logout同源、空 JSON 请求体,撤销当前会话
GET /healthzGET /readyz存活与就绪探针

管理接口默认要求管理员,明确的个人接口接受启用的两种角色并从会话获取所有者。模型网关使用独立 API 密钥,不能拿它登录管理后台。