认证与 Token
YeahBoot 使用 JWT 表达登录身份,同时在 Redis 保存服务端 Token 状态。JWT 负责签名和有效期,Redis 负责主动撤销、强制下线与在线策略。
管理后台登录
text
获取验证码状态
→ 提交用户名、密码、验证码、终端
→ IP 维度接口限流
→ 用户名 + 终端失败次数检查
→ 密码校验
→ 用户状态校验
→ 签发 JWT 并写入 Redis只有用户状态为启用才能登录。角色或资源为空不会阻止登录:后端会如实返回当前身份,前端仍允许进入首页、个人中心并正常退出。
登录连续失败达到阈值后,会按“用户名 + 终端”临时锁定。管理员可以在用户列表使用“解除登录限制”,终端默认为 Web。
App 登录
App 端以手机号定位用户,支持密码或短信验证码二选一:
- 用户存在:验证短信验证码或密码。
- 用户不存在:短信验证码验证通过后自动创建 App 用户。
- 短信验证码成功消费后立即从缓存删除。
手机号和账号承担唯一身份作用,生产环境应同时为短信发送增加频率、设备和业务风控。
受保护请求
text
Authorization: Bearer <token>
│
├── JWT 签名、主体、终端、有效期
├── Redis 服务端 Token
├── 当前用户状态
├── 当前启用角色
└── 当前启用资源仅 JWT 有效而 Redis Token 已删除时,请求仍返回认证失败。因此以下操作可以立即生效:
- 用户主动退出。
- 管理员禁用或删除用户。
- 服务端按主体或终端清理 Token。
权限实时性
角色和资源在请求鉴权时读取最新有效关系。修改角色权限、禁用角色或禁用资源后,无需批量踢出全部用户,后续请求会按最新数据判断。
用户状态不同:禁用用户会清理其 Token,使已有会话立即失效。系统还阻止用户禁用自己,并在配置了超级管理员时阻止禁用或删除超级管理员。
前端失效处理
管理后台对 HTTP 401 和业务码 401 使用统一处理:
- 只执行一次失效流程,避免并发请求重复提示。
- 清除本地 Token、用户、权限和页签状态。
- 跳转登录页。
- 保留友好提示。
HTTP 403 表示已认证但没有当前接口权限,不应当清除登录状态。
安全模式与超级管理员
safe-mode = true:跳过权限校验,适合初始化或明确受控的本地环境。super-admin = <username>:仅配置账号与当前登录账号完全一致时跳过权限校验。- 两种情况都会向前端提供通配权限
*:*:*,前后端都识别该值。
DANGER
公开 Demo 和生产环境必须关闭安全模式。超级管理员使用复杂密码且不向体验用户公开。
当前边界
当前使用单 Token 模型,尚未实现 Access Token + Refresh Token。需要长会话无感续期时,应统一设计刷新、撤销、并发请求重试和多终端策略,不建议只在前端延长本地保存时间。