Skip to content

认证与授权

会话认证、JWT、OAuth2、RBAC、越权防护。

Updated View as Markdown
For humans

认证与授权

认证(你是谁)和授权(你能做什么)是两个问题。面试主线:认证方案对比、授权模型、越权防护。

认证方案

方案 机制 优点 缺点
Session 服务端存会话,Cookie 带 id 可撤销、简单 服务端状态(要共享存储)
JWT 无状态令牌,签名自含 无状态、跨服务 难撤销、载荷泄露风险
OAuth2 授权协议(第三方登录) 标准、生态 流程复杂

Session vs JWT(高频):

维度 Session JWT
状态 服务端存 客户端带(签名)
撤销 直接删会话 难(等过期/黑名单)
扩展 多实例要共享存储 天然无状态
安全 泄露面小 载荷要加密或最小化

面试话术:能撤销要 Session,跨服务无状态要 JWT。JWT 的撤销难题用短过期 + refresh token 缓解。

JWT 要点

  • 三部分:header.payload.signature(见 FastAPI 鉴权篇完整实现)
  • 密钥:环境变量管理,别硬编码
  • 常见漏洞:算法混淆(alg=none)、密钥弱(爆破)、过期未校验
  • 防泄露:payload 不放敏感数据(或加密)

OAuth2 与第三方登录

  • 授权码模式(标准):用户授权 → 应用拿 code → 换 token
  • PKCE:移动端/无秘密客户端必配(防 code 拦截)
  • 与 JWT 结合:OAuth2 发 token(JWT 格式)→ 资源服务验签

授权:RBAC

模型 机制 适用
RBAC 用户 → 角色 → 权限 后台系统(标准)
ABAC 属性策略(用户/资源/环境) 复杂授权
ACL 资源权限列表 文件系统
用户 → 角色(admin/editor/viewer) → 权限(读/写/删)

越权防护(必考):OWASP 第一位漏洞。

越权 例子 防护
水平越权 改 user_id 看别人订单 资源归属校验(查询必须带当前用户)
垂直越权 普通用户调管理接口 接口级角色校验(装饰器/中间件)
# 水平越权防护: 查询强制绑定当前用户
order = db.query(Order).filter(
    Order.id == order_id, Order.user_id == current_user.id).first()

面试追问

  1. 认证和授权的区别? 认证验身份,授权验权限。两个独立环节
  2. Session 和 JWT? 可撤销性 vs 无状态。能撤销要 Session,跨服务要 JWT(短过期 + refresh)
  3. 水平越权怎么防? 资源归属校验:查询强制绑定当前用户 ID,不能只信传入 ID
  4. RBAC 是什么? 用户-角色-权限三层。后台系统标准
  5. JWT 撤销怎么办? 短过期 + refresh token、黑名单、或换 Session。无状态和可撤销是矛盾的
Navigation

Type to search…

↑↓ navigate↵ selectEsc close