鉴权认证技术选型:主流方案对比与落地建议

14 阅读4分钟

很多人存在一个常见误区,认为 JWT 和 OAuth2 是竞争关系。事实上,两者并非对立,而是互补关系:OAuth2 负责授权流程,JWT 则作为令牌格式,用于在授权后传递身份信息。

一、鉴权认证技术选型与作用场景

技术核心定位解决的问题典型场景选型建议
JWT令牌格式 / 无状态凭证如何在服务间安全传递用户身份,且服务端无需存储 Session前后端分离、微服务间传递用户身份、API 网关鉴权微服务标配,但需配合黑名单/短期过期解决注销问题
OAuth2授权协议如何让第三方应用在不获取用户密码的前提下访问用户资源第三方登录(微信/QQ/GitHub)、开放平台 API 授权涉及第三方授权时必选,单纯内部系统不必引入
OIDC身份认证协议OAuth2 只授权不认证,如何获取用户身份信息用户登录、SSO 单点登录、获取用户 Profile需要“登录”功能时,OIDC 是 OAuth2 的标准补充
RBAC权限模型如何按“角色”批量分配权限,避免逐个用户配置后台管理系统、企业内部系统、SaaS 多租户权限模型的基础,80% 场景够用
ABAC权限模型RBAC 角色爆炸,如何按“属性”动态授权数据权限(本部门/本人)、动态规则(时间/地点/IP)RBAC 不够用时升级,适合复杂数据权限场景
ReBAC权限模型如何表达“谁拥有什么”“谁和谁有关”的关系型权限云盘、文档协作、社交关系、组织架构继承关系型权限场景,可参考 Google Zanzibar 模型
mTLS网络层身份认证服务间通信如何互相验证身份,防止中间人攻击K8s + Istio 服务网格、零信任架构、金融级内网服务网格标配,替代 JWT 在服务间的传递
Private Key JWT客户端强认证Client Secret 太弱,如何更强地验证客户端身份高安全场景的 OAuth2 客户端认证替代简单 Secret,适合金融、医疗等高安全要求
SSO单点登录方案多个系统如何一次登录、处处通行企业内部多系统、SaaS 多产品线基于 OIDC/CAS 实现,减少重复登录
CAS单点登录协议老牌 SSO 协议,如何集中管理登录高校、传统企业内网老项目常见,新项目优先 OIDC

二、按场景选型决策表

业务场景推荐组合理由
后台管理系统(内部)JWT + RBAC用户量小,角色固定,RBAC 足够
SaaS 多租户系统OAuth2 + OIDC + RBAC + ABAC需要第三方登录 + 多租户数据隔离 + 精细权限
开放平台(第三方接入)OAuth2 + OIDC + JWT第三方授权 + 用户身份 + 令牌传递
微服务内部调用JWT + mTLSJWT 传用户身份,mTLS 保证服务间通信安全
K8s + Istio 服务网格mTLS + JWTmTLS 做服务间身份,JWT 做用户级鉴权
数据权限(本部门/本人)RBAC + ABAC角色控制功能权限,属性控制数据权限
文档协作 / 云盘ReBAC权限继承自文件夹/组织关系
企业 SSO 单点登录OIDC + SSO一次登录,多系统通行
金融核心系统OAuth2 + OIDC + mTLS + Private Key JWT高安全要求,多层防护
小程序 / App 登录OAuth2 + OIDC + JWT微信/手机号登录 + 令牌传递

三、鉴权认证分层架构(文字版)

text

┌─────────────────────────────────────────────────────────────┐
│                      用户层(User)                           │
│  用户登录 → OIDC(认证)→ 获取 id_token + access_token        │
├─────────────────────────────────────────────────────────────┤
│                      网关层(Gateway)                        │
│  API 网关 → JWT 校验 → 解析用户身份 → 转发请求                 │
│           → OAuth2 校验(第三方授权场景)                       │
├─────────────────────────────────────────────────────────────┤
│                      服务层(Service)                        │
│  服务间调用 → mTLS(服务身份) + JWT(用户身份)                │
│  业务鉴权 → RBAC(功能权限) + ABAC(数据权限) + ReBAC(关系)  │
├─────────────────────────────────────────────────────────────┤
│                      数据层(Data)                           │
│  数据行级权限 → ABAC(属性过滤) / ReBAC(关系过滤)             │
└─────────────────────────────────────────────────────────────┘

四、各技术核心作用一句话总结

技术一句话作用
JWT无状态令牌,服务间传递用户身份
OAuth2第三方授权,不暴露密码即可访问资源
OIDC基于 OAuth2 的身份认证,用于登录
RBAC按角色分配权限,权限模型基础
ABAC按属性动态授权,解决数据权限
ReBAC按关系授权,解决权限继承
mTLS服务间双向证书认证,零信任基础
Private Key JWT客户端强认证,替代 Client Secret
SSO一次登录,多系统通行
CAS老牌 SSO 协议,传统企业常用

五、选型核心原则

  1. 认证与授权分离:OAuth2 管授权,OIDC 管认证,JWT 管传递。

  2. 权限模型分层:RBAC 打底,ABAC 补数据权限,ReBAC 补关系权限。

  3. 网络层与服务层分离:mTLS 管服务间身份,JWT 管用户身份。

  4. 按需引入:内部系统 JWT + RBAC 足够,不必上 OAuth2 + OIDC + ABAC 全家桶。

  5. 安全等级匹配:金融级加 mTLS + Private Key JWT,普通业务 JWT + RBAC 即可。