跳到主要内容
版本:3.0.0

认证和鉴权体系

这页不是某一个组件的详细说明,而是 Aegis 3.x 中认证与鉴权能力的总入口。如果你正在判断“我该接哪一组组件”“组件之间是什么关系”“先看哪篇文档最合适”,先看这里会更省时间。

先理解这组能力怎么分层

当前 3.x 的认证与鉴权能力可以拆成三层:

层级作用对应组件
基础认证层建立 Bearer Token 认证链路、提供 CurrentUser 和默认登录接口Aegis.Core.Authentication
基础授权层建立 ApiAuthorize 授权过滤、权限缓存和授权入口Aegis.Core.Authorization
具体实现层提供真实的登录方式、Token 校验和权限来源Aegis.Authorization.SSOAegis.Authorization.JwtAegis.Authorization.ESS

除此之外,还有一个常见扩展:

扩展类型作用对应组件
会话扩展把用户会话从默认内存切到 RedisAegis.Authorization.RedisUserManager

可以把它理解成:

  • Aegis.Core.Authentication 负责“系统知道什么是登录态”。
  • Aegis.Core.Authorization 负责“系统知道什么时候要做权限判断”。
  • SSOJWTESS 负责“登录态和权限到底从哪里来”。
  • RedisUserManager 负责“登录态存在哪里”。

组件关系一图看懂

需要注意:

  • SSOJWT 都建立在“基础认证”之上。
  • ESS 同时依赖“基础认证”和“基础授权”,因为它既做登录,也做权限判定。
  • RedisUserManager 不是独立认证方案,而是给认证方案补会话存储能力。

我该选哪种方案

只想把认证链路先接起来

适合场景:

  • 你要先打通 Authorization: Bearer {token} 请求链路
  • 你已经准备自定义认证实现
  • 你还没确定最终使用 SSOJWT 还是 ESS

推荐阅读顺序:

  1. 基础认证(Aegis.Core.Authentication)
  2. 再根据实际方案继续看 SSOJWTESS

需要统一登录,但暂时不做接口级资源授权

适合场景:

  • 系统对接统一身份平台
  • 当前更关注“用户能登录”“后端能识别当前用户”
  • 权限判定主要由业务自己处理,或尚未接入统一权限中心

推荐方案:

通常配套阅读:

  1. 基础认证(Aegis.Core.Authentication)
  2. SSO 认证(Aegis.Authorization.SSO)

需要本地 Bearer Token 登录能力

适合场景:

  • 本地开发或单体应用先快速落地
  • 不依赖外部统一认证中心
  • 希望先得到一条最短可运行路径

推荐方案:

通常配套阅读:

  1. 基础认证(Aegis.Core.Authentication)
  2. JWT 认证(Aegis.Authorization.Jwt)
  3. 按部署形态决定是否继续看 Redis 用户会话(Aegis.Authorization.RedisUserManager)

既要统一登录,也要统一接口授权

适合场景:

  • 认证和权限都由平台统一提供
  • 后端需要基于资源权限控制接口访问
  • 还可能要用客凭访问其他服务

推荐方案:

通常配套阅读:

  1. 基础认证(Aegis.Core.Authentication)
  2. 基础授权(Aegis.Core.Authorization)
  3. ESS 认证鉴权(Aegis.Authorization.ESS)

需要把登录态切到 Redis

适合场景:

  • 多实例部署
  • 不希望应用重启就丢登录态
  • 用户会话需要跨节点共享

推荐方案:

这通常不是单独接入,而是叠加在已有认证方案之上,例如:

  • Authentication + JwtAuthorize + RedisUserManager
  • Authentication + SsoAuthorize + RedisUserManager
  • Authentication + 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 会话,多实例之间的登录状态保持一致。

只要这几项都符合预期,通常说明认证与鉴权主链路已经接通。

建议阅读路径

如果你想从“体系说明”继续进入具体实现,推荐按下面顺序阅读:

  1. 基础认证(Aegis.Core.Authentication)
  2. 基础授权(Aegis.Core.Authorization)
  3. 按实际方案继续看以下页面之一:

如果你是从新项目起步,也可以先回到 创建 Aegis 项目 了解宿主项目结构,再回到这组组件页逐个接入。