认证与会话管理
当你需要接入前端登录、排查 Token 失效、或决定该用 JWT 还是 Redis-Token 模式时,从这篇开始。youlai-think 提供完整的认证与会话管理方案,支持双模式切换,本文涵盖会话模式选择、登录认证流程、Token 结构、会话失效与撤销。
会话模式
通过 SECURITY_SESSION_MODE 环境变量切换:
| 模式 | Token类型 | 服务端存储 | 在线用户 | 适用场景 |
|---|---|---|---|---|
jwt | JWT(含用户信息) | 仅撤销状态 | 不支持 | 分布式、高性能 |
redis-token | 随机UUID | 完整会话信息 | 支持 | 会话治理 |
认证流程
认证接口
| 接口 | 方法 | 说明 |
|---|---|---|
/api/v1/auth/captcha | GET | 获取验证码 |
/api/v1/auth/login | POST | 用户登录 |
/api/v1/auth/refresh-token | POST | 刷新令牌 |
/api/v1/auth/logout | DELETE | 退出登录 |
请求头约定:
Authorization: Bearer <accessToken>登录响应示例:
json
{
"code": "00000",
"msg": "成功",
"data": {
"tokenType": "Bearer",
"accessToken": "...",
"refreshToken": "...",
"expiresIn": 7200
}
}Token结构
JWT Payload:
json
{"sub":"admin", "userId":1, "deptId":10, "tokenVersion":5, "dataScopes":[...], "authorities":["ROLE_ADMIN"]}核心字段:userId/deptId(用户/部门ID)、tokenVersion(版本号)、dataScopes(数据权限)、authorities(角色权限)
会话失效机制
| 失效类型 | 触发场景 | 实现方式 |
|---|---|---|
| 单端退出 | 用户主动退出 | 黑名单 Token 或删除 Redis 键 |
| 全端踢下线 | 改密、封禁、管理员踢出 | 递增 tokenVersion 版本号 |
tokenVersion机制:auth:user:token_version:{userId} 存储版本号,校验时 token.version < redis.version 则失效
相关文件
| 文件路径 | 说明 |
|---|---|
extend/jwt/JwtTokenManager.php | JWT 生成与解析 |
extend/jwt/TokenManager.php | Token 管理接口 |
extend/jwt/TokenManagerResolver.php | Token 管理器解析 |
app/auth/controller/AuthController.php | 认证控制器 |
app/auth/service/AuthService.php | 认证服务 |
app/common/middleware/AuthMiddleware.php | 认证中间件 |
config/security.php | 安全配置 |
