认证与会话管理
当你需要接入前端登录、排查 Token 失效、或决定该用 JWT 还是 Redis-Token 模式时,从这篇开始。youlai-aspnet 提供完整的认证与会话管理方案,支持双模式切换,本文涵盖会话模式选择、登录认证流程、Token 结构、会话失效与撤销、权限缓存策略。
会话模式
通过 Security:Session:Type 配置切换:
| 模式 | 说明 | 适用场景 |
|---|---|---|
jwt | JWT 无状态认证 + Redis 辅助撤销 | 分布式系统、对性能要求高 |
redis-token | Redis 有状态认证 | 需要在线用户管理、精细化会话控制 |
模式对比:
| 特性 | JWT 模式 | Redis-Token 模式 |
|---|---|---|
| Token 类型 | JWT(含用户信息) | 随机 UUID |
| 服务端存储 | 仅撤销状态 | 完整会话信息 |
| 扩展性 | 天然支持分布式 | 需 Redis 共享 |
| 在线用户 | 不支持 | 支持 |
| 会话管理 | 依赖 Redis 辅助 | 原生支持 |
| 性能 | 更高(无网络 IO) | 需 Redis 查询 |
认证流程
认证接口
| 接口 | 方法 | 说明 |
|---|---|---|
/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
{
"username": "admin",
"password": "123456",
"captchaId": "uuid",
"captchaCode": "1234"
}响应:
json
{
"code": "00000",
"msg": "成功",
"data": {
"tokenType": "Bearer",
"accessToken": "eyJhbGc...",
"refreshToken": "eyJhbGc...",
"expiresIn": 7200
}
}刷新令牌
请求:
POST /api/v1/auth/refresh-token?refreshToken=eyJhbGc...响应:
json
{
"code": "00000",
"msg": "成功",
"data": {
"tokenType": "Bearer",
"accessToken": "eyJhbGc...",
"refreshToken": "eyJhbGc...",
"expiresIn": 7200
}
}退出登录
请求:
DELETE /api/v1/auth/logout
Authorization: Bearer <accessToken>响应:
json
{
"code": "00000",
"msg": "成功"
}Token 结构
JWT Token 载荷:
json
{
"sub": "1", // 用户 ID
"username": "admin", // 用户名
"exp": 1234567890, // 过期时间戳
"iat": 1234560000, // 签发时间戳
"jti": "uuid" // Token ID(用于撤销)
}会话配置
json
"Security": {
"Session": {
"Type": "jwt",
"Jwt": {
"SecretKey": "your-secret-key-at-least-32-characters-long",
"Issuer": "youlai-aspnet",
"AccessTokenTTL": 7200,
"RefreshTokenTTL": 604800
}
}
}| 参数 | 说明 | 默认值 |
|---|---|---|
Type | 会话类型:jwt / redis-token | jwt |
SecretKey | JWT 签名密钥 | - |
Issuer | Token 签发者 | youlai-aspnet |
AccessTokenTTL | 访问令牌有效期(秒) | 7200 |
RefreshTokenTTL | 刷新令牌有效期(秒) | 604800 |
相关文件
| 文件 | 说明 |
|---|---|
Youlai.Application/Auth/IAuthService.cs | 认证服务接口 |
Youlai.Application/Auth/AuthService.cs | 认证服务实现 |
Youlai.Application/Auth/JwtClaimConstants.cs | JWT 声明常量 |
Youlai.Application/Security/JwtTokenManager.cs | Token 管理器 |
Youlai.Api/Security/CurrentUser.cs | 当前用户上下文 |
