JWT 用户鉴权开关:局域网裸跑 vs 公网必须开
两种模式
Kikoeru 后端的用户认证是可选的:
| 模式 | 行为 | 适用场景 |
|---|---|---|
| 关闭鉴权 | 任何人知道地址就能访问全部功能 | 纯局域网、只有自己用 |
| 开启 JWT 鉴权 | 需要先登录获取 Token,每次请求带 Token | 公网暴露、可能被多人访问 |
默认行为
不同部署形态的默认值可能不同——Docker 镜像通常默认关闭 JWT(因为自托管场景大多数是内网裸跑)。可以在 config/config.json 里改。
怎么开启
方式一:Web 界面改配置
进入"设置 → 配置",找到 JWT 相关的开关:
jwt.enable或类似字段- 设为
true - 设置用户名和密码(或接受默认)
- 保存 → 重启服务器
方式二:直接改 config.json
找到 config/config.json(路径取决于部署方式):
{
"jwt": {
"enable": true,
"secret": "一个随机生成的长字符串",
"expiresIn": "7d",
"users": [
{ "username": "admin", "password": "你的密码" }
]
}
}
保存后重启服务。
JWT 鉴权的工作流程
- 客户端第一次连接 → 收到 401 未授权
- 客户端弹出登录页面(用户名 + 密码)
- 登录成功 → 后端签发 JWT Token(有效期默认 7 天)
- 后续每次请求带上 Token → 后端验证 → 放行
- Token 过期 → 重新登录
局域网场景要不要开
可以不开——但有个前提:你的路由器的 Wi-Fi 密码很安全。
如果:
- Wi-Fi 密码可能被别人猜到
- 家里有客人经常来连 Wi-Fi
- 有邻居蹭过网
那还是开一下 JWT 保险点。
公网场景必须开
如果你把 Kikoeru 映射到了公网 IP/端口,不开 JWT 等于把你的整个音声库对全网开放:
- 搜索引擎可能抓到
- 扫端口的脚本能直接访问
- 任何人都能搜索、播放、甚至删数据
最低限度也得用 Cloudflare Tunnel 或反代 + Basic Auth。
多用户场景
目前后端是单用户架构(见 多账户切换)。即使开了 JWT,也只有一组用户名密码(或你可以手动在 users 数组里加多个)。真正的多用户隔离(每个人独立的收藏、独立的权限)还没实现。