认证、授权、鉴权与权限控制
认证、授权、鉴权与权限控制
在后端开发中存在 认证(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 等安全框架完成,权限控制需要结合业务场景做定制化设计。
    如果这篇文章对你有用,可以关注本人微信公众号获取更多ヽ(^ω^)ノ  ~
 
 


 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号