认证和鉴权体系
这页不是某一个组件的详细说明,而是 Aegis 3.x 中认证与鉴权能力的总入口。如果你正在判断“我该接哪一组组件”“组件之间是什么关系”“先看哪篇文档最合适”,先看这里会更省时间。
先理解这组能力怎么分层
当前 3.x 的认证与鉴权能力可以拆成三层:
| 层级 | 作用 | 对应组件 |
|---|---|---|
| 基础认证层 | 建立 Bearer Token 认证链路、提供 CurrentUser 和默认登录接口 | Aegis.Core.Authentication |
| 基础授权层 | 建立 ApiAuthorize 授权过滤、权限缓存和授权入口 | Aegis.Core.Authorization |
| 具体实现层 | 提供真实的登录方式、Token 校验和权限来源 | Aegis.Authorization.SSO、Aegis.Authorization.Jwt、Aegis.Authorization.ESS |
除此之外,还有一个常见扩展:
| 扩展类型 | 作用 | 对应组件 |
|---|---|---|
| 会话扩展 | 把用户会话从默认内存切到 Redis | Aegis.Authorization.RedisUserManager |
可以把它理解成:
Aegis.Core.Authentication负责“系统知道什么是登录态”。Aegis.Core.Authorization负责“系统知道什么时候要做权限判断”。SSO、JWT、ESS负责“登录态和权限到底从哪里来”。RedisUserManager负责“登录态存在哪里”。
组件关系一图看懂
需要注意:
SSO和JWT都建立在“基础认证”之上。ESS同时依赖“基础认证”和“基础授权”,因为它既做登录,也做权限判定。RedisUserManager不是独立认证方案,而是给认证方案补会话存储能力。
我该选哪种方案
只想把认证链路先接起来
适合场景:
- 你要先打通
Authorization: Bearer {token}请求链路 - 你已经准备自定义认证实现
- 你还没确定最终使用
SSO、JWT还是ESS
推荐阅读顺序:
- 基础认证(Aegis.Core.Authentication)
- 再根据实际方案继续看
SSO、JWT或ESS
需要统一登录,但暂时不做接口级资源授权
适合场景:
- 系统对接统一身份平台
- 当前更关注“用户能登录”“后端能识别当前用户”
- 权限判定主要由业务自己处理,或尚未接入统一权限中心
推荐方案:
通常配套阅读:
需要本地 Bearer Token 登录能力
适合场景:
- 本地开发或单体应用先快速落地
- 不依赖外部统一认证中心
- 希望先得到一条最短可运行路径
推荐方案:
通常配套阅读:
- 基础认证(Aegis.Core.Authentication)
- JWT 认证(Aegis.Authorization.Jwt)
- 按部署形态决定是否继续看 Redis 用户会话(Aegis.Authorization.RedisUserManager)
既要统一登录,也要统一接口授权
适合场景:
- 认证和权限都由平台统一提供
- 后端需要基于资源权限控制接口访问
- 还可能要用客凭访问其他服务
推荐方案:
通常配套阅读:
需要把登录态切到 Redis
适合场景:
- 多实例部署
- 不希望应用重启就丢登录态
- 用户会话需要跨节点共享
推荐方案:
这通常不是单独接入,而是叠加在已有认证方案之上,例如:
Authentication + JwtAuthorize + RedisUserManagerAuthentication + SsoAuthorize + RedisUserManagerAuthentication + Authorization + EssAuthorize + Redis 会话扩展
推荐接入顺序
如果你使用 Component.deps.json 维护组件依赖,认证与鉴权组建议按“基础层在前、实现层在后”的顺序接入。
仅认证场景
{
"Components": {
"Services": [
"Authentication",
"JwtAuthorize"
],
"Middlewares": [
"Authentication"
]
}
}
这里的 JwtAuthorize 也可以替换成 SsoAuthorize。
认证 + 授权场景
{
"Components": {
"Services": [
"Authentication",
"Authorization",
"EssAuthorize"
],
"Middlewares": [
"Authentication",
"Authorization",
"EssAuthorize"
]
}
}
判断顺序是否正确,可以看两个原则:
- 先接基础认证,再接具体认证实现。
- 只要存在真实授权能力,基础授权就应位于具体授权实现之前。
接入后怎么判断是否生效
不管你选哪种方案,至少应该验证下面几件事:
- 登录接口能够返回 Token,或者系统能识别外部登录后带来的 Token。
- 未标记
AllowAnonymous的接口,在没有 Token 时会返回401。 - 认证成功后,业务代码可以正常读取
CurrentUser.Value。 - 如果使用
ApiAuthorize,无权限访问时会返回403。 - 如果使用 Redis 会话,多实例之间的登录状态保持一致。
只要这几项都符合预期,通常说明认证与鉴权主链路已经接通。
建议阅读路径
如果你想从“体系说明”继续进入具体实现,推荐按下面顺序阅读:
- 基础认证(Aegis.Core.Authentication)
- 基础授权(Aegis.Core.Authorization)
- 按实际方案继续看以下页面之一:
- SSO 认证(Aegis.Authorization.SSO)
- JWT 认证(Aegis.Authorization.Jwt)
- ESS 认证鉴权(Aegis.Authorization.ESS)
- Redis 用户会话(Aegis.Authorization.RedisUserManager)
如果你是从新项目起步,也可以先回到 创建 Aegis 项目 了解宿主项目结构,再回到这组组件页逐个接入。