直接跳到内容

认证与授权

身份安全基础概念

认证与授权是身份安全的两大核心支柱,构成了现代应用安全的基石。认证解决“你是谁”的问题,而授权解决“你能做什么”的问题。

核心关系示意图:

用户 -> 认证(验证身份) -> 授权(分配权限) -> 资源访问
    ↓           ↓           ↓           ↓
 提供凭证   ->  身份验证   ->  权限检查   ->  允许/拒绝

认证机制

密码认证

基本流程:用户提供用户名和密码,系统验证凭证匹配。

认证流程示意图:

用户输入 -> 传输加密 -> 服务器验证 -> 返回结果
    ↓           ↓           ↓           ↓
 username   ->  HTTPS    ->  哈希比对   ->  成功/失败
 password   ->  传输     ->  盐值校验   ->  会话令牌

密码安全存储

原始密码: "myPassword123"
加盐处理: "myPassword123" + "随机盐值"
哈希计算: SHA256(密码+盐值) -> "a1b2c3..."
存储结果: [盐值 + 哈希值] 存入数据库

多因素认证

认证因素分类

  • 知识因素:密码、PIN 码、安全问题的答案
  • 拥有因素:手机、安全密钥、智能卡
  • 固有因素:指纹、面部识别、虹膜扫描

MFA 流程示意图:

第一因素: 用户名+密码 -> 验证通过
第二因素: 手机验证码 -> 输入6位代码
第三因素: 指纹验证 -> 生物特征扫描
最终结果: 多重验证通过 -> 授予访问权限

生物特征认证

生物识别类型

指纹识别: 指纹图案 -> 特征点提取 -> 模板匹配
面部识别: 面部特征 -> 3D建模 -> 活体检测
虹膜识别: 虹膜纹理 -> 模式分析 -> 高精度验证
声纹识别: 语音特征 -> 频率分析 -> 行为生物识别

会话管理

会话生命周期

完整会话流程

用户登录 -> 创建会话 -> 会话维护 -> 会话销毁
    ↓           ↓           ↓           ↓
 认证成功   ->  生成SessionID ->  请求携带   ->  登出/超时
          ->  服务器存储   ->  状态验证   ->  清理资源

会话安全控制

安全防护措施

会话固定防护: 登录后重新生成SessionID
会话超时: 空闲15分钟自动过期
并发控制: 同一账户最多3个活跃会话
安全退出: 服务端彻底销毁会话数据

令牌机制

JWT 结构解析

三部分组成

Header: {"alg": "HS256", "typ": "JWT"}
Payload: {"sub": "123", "name": "John", "iat": 1516239022}
Signature: HMACSHA256(base64UrlEncode(header) + "." + base64UrlEncode(payload), secret)

完整 JWT 格式:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

令牌类型对比

访问令牌 vs 刷新令牌

访问令牌:
  - 短期有效 (15分钟-1小时)
  - 携带用户权限
  - 每个API请求都需要
  - 存储在内存中

刷新令牌:
  - 长期有效 (数天-数月)
  - 仅用于获取新访问令牌
  - 安全存储 (HttpOnly Cookie)
  - 可撤销

授权模型

基于角色的访问控制

RBAC 核心结构

用户 -> 分配角色 -> 角色拥有权限 -> 访问资源
    ↓           ↓           ↓           ↓
 UserA   ->   Administrator ->  所有权限   ->  完全访问
 UserB   ->   Editor     ->  编辑权限   ->  内容管理
 UserC   ->   Viewer     ->  只读权限   ->  数据查看

权限继承示例

角色层级:
  SuperAdmin → Admin → Manager → User → Guest
权限继承:
  SuperAdmin: 所有权限
  Admin: 除系统设置外所有权限  
  Manager: 团队管理权限
  User: 基础操作权限
  Guest: 只读权限

基于属性的访问控制

ABAC 决策模型

访问请求 -> 策略评估 -> 决策引擎 -> 允许/拒绝
    ↓           ↓           ↓           ↓
 用户属性   ->  规则匹配   ->  环境检查   ->  执行决策
 资源属性   ->  条件验证   ->  上下文分析   ->  返回结果

属性分类

用户属性: 部门、职级、安全等级
资源属性: 分类、敏感度、所属部门
环境属性: 时间、位置、设备安全状态
操作属性: 读取、写入、删除、共享

权限粒度控制

权限层次结构

粗粒度 -> 细粒度 -> 数据级权限
   ↓         ↓         ↓
模块访问 -> 功能操作 -> 记录筛选
页面权限 -> 按钮控制 -> 字段级权限

OAuth 2.0 框架

授权流程

授权码流程示意图

客户端 -> 授权请求 -> 用户认证 -> 授权同意
    ↓           ↓           ↓           ↓
 重定向到   ->  认证页面   ->  输入凭证   ->  授权确认
 授权服务器   ->  返回授权码 ->  交换令牌   ->  获取访问令牌

四种授权类型

授权码: Web服务器应用,最安全
隐式: 单页应用,已不推荐
密码凭证: 受信任应用,直接传递密码
客户端凭证: 机器对机器通信

令牌端点安全

安全防护机制

客户端认证: client_id + client_secret
重定向URI验证: 严格匹配预注册URI
PKCE扩展: 防止授权码拦截攻击
令牌绑定: 关联特定客户端实例

OpenID Connect

身份层扩展

OIDC 流程

依赖方 -> 认证请求 -> OpenID提供者 -> 身份验证
    ↓           ↓           ↓           ↓
 请求身份信息 ->  包含scope=openid ->  用户认证 ->  返回ID令牌
          ->  验证签名   ->  获取用户信息   ->  完成登录

ID 令牌结构

标准声明字段

json
{
  "iss": "https://server.example.com",
  "sub": "248289761001",
  "aud": "s6BhdRkqt3",
  "exp": 1311281970,
  "iat": 1311280970,
  "auth_time": 1311280969,
  "nonce": "n-0S6_WzA2Mj",
  "acr": "urn:mace:incommon:iap:silver"
}

单点登录

SSO 架构模式

中央认证服务

应用A -> 重定向到CAS -> 用户登录 -> 返回服务票据
应用B -> 验证票据 -> 自动登录 -> 无缝访问
应用C -> 全局会话 -> 统一登出 -> 所有应用退出

信任关系建立

身份提供者(IdP) <- 信任 -> 服务提供者(SP)
     ↓                       ↓
  统一认证                依赖外部身份
  集中管理                本地权限控制

安全实践与防护

认证安全强化

防护措施综合

暴力破解防护: 登录失败次数限制、CAPTCHA验证
凭证安全: 密码策略强制、定期更换提醒
会话保护: 安全Cookie属性、会话轮换
设备管理: 新设备验证、可信设备记录

授权安全控制

权限验证原则

最小权限: 用户只获得必要权限
权限分离: 敏感操作需多人授权
定期审查: 权限审计和清理
动态授权: 基于上下文调整权限

无密码认证

替代方案

魔法链接: 邮件中的一次性登录链接
验证器应用: TOTP/HOTP动态代码
生物识别: 面部/指纹替代密码
安全密钥: FIDO2/WebAuthn标准

零信任架构

核心原则

从不信任: 所有请求都必须验证
始终验证: 持续的身份和设备检查
最小权限: 基于上下文的动态授权
假设被入侵: 分段访问和微隔离

认证与授权构建了数字身份的完整安全体系,从基础的身份验证到精细的权限控制,每个环节都需要精心设计和严格实施,才能确保系统安全可靠。

认证与授权已经加载完毕