Fork me on GitHub

认证、授权、鉴权与权限控制

认证、授权、鉴权与权限控制

在后端开发中存在 认证(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 核心目的

在用户请求时,系统判断:

  1. 是否登录(认证)
  2. 是否有权限(授权)

3.2 常见实现

  • 早期 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 等安全框架完成,权限控制需要结合业务场景做定制化设计。

posted @ 2025-09-01 11:22  秋夜雨巷  阅读(58)  评论(0)    收藏  举报