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

很多人存在一个常见误区,认为 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 + mTLS JWT 传用户身份,mTLS 保证服务间通信安全
K8s + Istio 服务网格 mTLS + JWT mTLS 做服务间身份,JWT 做用户级鉴权
数据权限(本部门/本人) RBAC + ABAC 角色控制功能权限,属性控制数据权限
文档协作 / 云盘 ReBAC 权限继承自文件夹/组织关系
企业 SSO 单点登录 OIDC + SSO 一次登录,多系统通行
金融核心系统 OAuth2 + OIDC + mTLS + Private Key JWT 高安全要求,多层防护
小程序 / App 登录 OAuth2 + OIDC + JWT 微信/手机号登录 + 令牌传递

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

text

bash 复制代码
┌─────────────────────────────────────────────────────────────┐
│                      用户层(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 即可。

相关推荐
用户125758524361 小时前
GoFrame Vue3开源后台管理系统推荐:数据库与Worker要求怎么验
数据库·后端·go
核桃er1 小时前
SpringBoot 整合 MyBatis 读取 MySQL 数据——完整开发实录
后端
小卿噢1 小时前
50 万个定时器,四种实现差了 115 倍
后端
用户54817845909501 小时前
CDN 实战:如何用 4 步让网站提速 10 倍
后端
MaxHua1 小时前
达梦 DTS 迁移 MySQL 报错 - 3236:此列列表已索引 解决方案
数据库·后端
琳达爱分享1 小时前
从单机令牌桶到集群限流:一次配额超发的复盘
后端·算法
leo在掘金1 小时前
亚马逊开源TorchNeuron:改1行代码跑上Trainium
后端·架构
青岛中阳消防1 小时前
分布式光纤火灾探测器安装常见问题、光缆敷设与光纤熔接解析
后端