认证、授权、鉴权与权限控制
在后端开发中存在 认证(Authentication)、授权(Authorization)、鉴权(Access Control)和 权限控制(Permission Control)。
1. 认证(Authentication)
我是谁?
系统需要确认“你是不是你”。
1.1 核心目的
验证用户的身份是否合法、真实、唯一。
1.2 常见方式
方式
说明
优缺点
账号 + 密码
最常见,通过校验数据库中的哈希密码完成
简单,但存在泄露风险
短信验证码
短信接收动态码
安全性一般,成本高
OAuth2 / 第三方登录
通过微信、GitHub、Google 等完成身份确认
用户体验好,但依赖外部系统
Token / JWT
登录后签发令牌,后续请求凭 Token 验证身份
前后端分离项目常用
多因素认证(MFA)
密码 + 短信 + 指纹 + 人脸
安全性最高,体验最差
1.3 类比
认证就像查身份证:去网吧,老板要你出示身份证 → 系统在做同样的事情。
2. 授权(Authorization)
我能做什么?
在身份被确认后,系统需要判定用户能否访问某资源或操作某功能。
2.1 核心目的
根据用户身份,决定能否访问某个资源。
2.2 常见模型
模型
全称
特点
适用场景
RBAC
Role-Based Access Control
用户 → 角色 → 权限,基于角色分配权限
企业级系统最常见
ABAC
Attribute-Based Access Control
基于用户属性、资源属性、环境属性等动态判断
政务系统、金融风控
PBAC
Policy-Based Access Control
基于策略规则控制访问
大型 SaaS、多租户系统
2.3 类比
授权就像办会员卡:有身份证(认证成功) ≠ 能进 VIP 区。
3. 鉴权(Access Control)
验证用户是否有权限访问资源
严格来说,“鉴权”是“认证 + 授权”的执行过程。很多公司会把“鉴权”当作“权限校验”使用。
3.1 核心目的
在用户请求时,系统判断:
是否登录(认证)
是否有权限(授权)
3.2 常见实现
(1) 基于 Session / Cookie
早期 Web 常用
服务端存 Session,客户端传 Cookie 识别
缺点:分布式扩展麻烦
(2) 基于 JWT
登录后颁发 Token,用户请求时带上 Token
服务端解析 Token → 确认身份 & 校验权限
缺点:Token 被盗风险高,需结合 HTTPS
(3) 基于 API 网关
微服务架构中常用
认证、鉴权由网关统一处理
应用层只管业务,不管安全
4. 权限控制(Permission Control)
如何精细地定义和管理权限
这是对“授权”和“鉴权”的具体落地。
4.1 典型场景
功能级权限:能否访问某菜单
数据级权限:能否查看某条数据
字段级权限:能否看到某个字段
操作级权限:能否删除、修改、导出
4.2 常见做法
(1) RBAC 三层模型
用户(User)
角色(Role)
权限(Permission)
用户 → 角色 → 权限,适合中小型系统
(2) RBAC + 数据权限
用户只能看自己辖区的数据,例如:
SELECT * FROM orders
WHERE user_id = :current_user
OR region_id IN (:permitted_regions)
(3) 策略引擎
使用 Casbin、OPA(Open Policy Agent) 这类策略框架
支持动态加载策略,实现灵活的权限控制
5. 四者关系总结
概念
问题
本质
常用技术
认证
你是谁?
身份确认
密码、Token、OAuth
授权
你能做什么?
权限分配
RBAC、ABAC、PBAC
鉴权
你能不能访问?
校验身份 + 权限
Session、JWT、网关
权限控制
如何设计权限?
权限模型落地
RBAC、Casbin、策略引擎
5.1 总结思维导图
认证 Authentication —— 确认身份
↓
授权 Authorization —— 分配权限
↓
鉴权 Access Control —— 执行检查
↓
权限控制 Permission Control —— 模型设计 & 落地实现
6. 最佳实践
前后端分离
前端只做页面控制,不信任前端权限逻辑
后端负责最终鉴权
分层设计
认证、授权和权限控制解耦
最小权限原则
用户只能访问必要资源
日志与审计
所有敏感操作记录日志,方便排查安全问题
安全兜底
除了在应用层做鉴权,还可在 API 网关、反向代理层加强控制
7. 总结
认证解决“你是谁”
授权解决“你能做什么”
鉴权是“检查是否允许”
权限控制是“如何设计和实现权限管理”
企业级系统中,认证和授权通常由 Spring Security、Shiro、OAuth2 Server 等安全框架完成,权限控制需要结合业务场景做定制化设计。