外观
认证与授权
身份安全基础概念
认证与授权是身份安全的两大核心支柱,构成了现代应用安全的基石。认证解决“你是谁”的问题,而授权解决“你能做什么”的问题。
核心关系示意图:
用户 -> 认证(验证身份) -> 授权(分配权限) -> 资源访问
↓ ↓ ↓ ↓
提供凭证 -> 身份验证 -> 权限检查 -> 允许/拒绝认证机制
密码认证
基本流程:用户提供用户名和密码,系统验证凭证匹配。
认证流程示意图:
用户输入 -> 传输加密 -> 服务器验证 -> 返回结果
↓ ↓ ↓ ↓
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标准零信任架构
核心原则:
从不信任: 所有请求都必须验证
始终验证: 持续的身份和设备检查
最小权限: 基于上下文的动态授权
假设被入侵: 分段访问和微隔离认证与授权构建了数字身份的完整安全体系,从基础的身份验证到精细的权限控制,每个环节都需要精心设计和严格实施,才能确保系统安全可靠。