这是一篇 2022 年 10 月整理的身份安全笔记。内容按当年的视角写就:OAuth 2.0 / OIDC 已经是主流、FIDO2 与 WebAuthn 开始普及、零信任(Zero Trust)概念盛行——但底层的认证三要素与访问控制原则从未改变。这正是把历史笔记迁移到新博客的价值。
身份安全的三个 A
任何系统的身份与访问管理(IAM)都围绕三个核心环节展开——认证(Authentication)、授权(Authorization)、审计(Audit),统称 AAA。
| 环节 | 英文 | 回答的问题 | 核心机制 |
|---|---|---|---|
| 认证 | Authentication | 知道你是谁 | 密码、令牌、生物特征 |
| 授权 | Authorization | 你能做什么 | MAC、RBAC、OAuth 等访问控制模型 |
| 审计 | Audit | 你做了什么 | 审计管理控制、审计技术控制 |
三者的关系是一条严格有序的链路:先认证(确认身份)→ 再授权(决定权限)→ 最后审计(记录行为)。没有认证就没有授权,没有授权就没有审计的意义。
Authentication:认证
认证解决”知道你是谁”的问题——验证用户声明的身份是否真实。常见的认证手段包括密码、动态令牌、生物特征、OAuth 单点登录等(详见下文”认证三要素”)。
Authorization:授权
授权解决”你能做什么”的问题——在身份确认之后,决定该身份能访问哪些资源、执行哪些操作。授权模型主要有:
- MAC(强制访问控制,Mandatory Access Control):系统强制按安全级别控制访问,用户不可自行改变。多用于军用、涉密等高安全场景。
- RBAC(基于角色的访问控制,Role-Based Access Control):把权限授予角色,再把角色授予用户。企业系统最主流,方便批量管理。
- OAuth(开放授权):让第三方应用在用户授权下访问其资源,是”授权”而非”认证”协议——用户不必把密码交给第三方。配合 OIDC 可完成身份认证。
OAuth 与认证的区别常被混淆:OAuth 2.0 解决的是”第三方应用如何获得访问授权”,而”确认用户是谁”由 OIDC(基于 OAuth 2.0 的身份层)承担。
Audit:审计
审计解决”你做了什么”的问题——记录、监控、分析用户在系统中的行为,是事后追溯与合规要求的基础。
- 审计管理控制:对审计活动本身的管理,包括审计策略制定、审计范围定义、审计人员权限管理、审计结果的上报与处置流程。
- 审计技术控制:具体的技术手段,包括日志采集(登录日志、操作日志、权限变更日志)、日志留存与防篡改、行为监控、异常告警、定期审计报告。
认证:用户身份认证的三个维度
认证手段虽然五花八门,但归根结底只有三大类——你知道什么、你拥有什么、你是什么。
你知道什么(知识要素,Something You Know)
基于只有用户自己知道的信息:
| 方式 | 说明 |
|---|---|
| 密码 | 最基础、最常用的认证方式 |
| PIN | 个人身份标识码(Personal Identification Number),比密码短,多用于 ATM、设备解锁 |
| 密码短语 | 通过一段短语构建更复杂的密码,如 correct-horse-battery-staple——比单字密码长得多、也难猜得多 |
知识要素的弱点:可被猜测、窃取、社会工程学套取。弱口令、撞库、钓鱼都是针对它的攻击。
你拥有什么(持有要素,Something You Have)
基于用户持有的物理或数字凭证:
| 方式 | 说明 |
|---|---|
| 硬令牌 | 硬件设备,每 30/60 秒动态生成一次性密码(如 RSA SecurID) |
| 智能卡 | 内置芯片的卡片,需读卡器,多用于企业门禁与电脑登录 |
| USB 卡 | 如 YubiKey 这类 USB 安全密钥,可做免密登录 |
| 手机 APP | 手机上的动态口令(Google Authenticator)、短信验证码、App 推送确认 |
持有要素的弱点:可能丢失、被盗、被复制。但它与知识要素组合时,攻击者必须同时拿到两样东西,难度大增。
你是什么(生物特征要素,Something You Are)
基于人体固有的生理特征:
| 方式 | 说明 |
|---|---|
| 指纹 | 最普及的生物认证,成本低、速度快 |
| 声纹 | 通过声音特征识别,适合电话渠道 |
| 脸纹 | 人脸识别,手机解锁、刷脸支付的标配 |
| 虹膜 | 虹膜纹理独一无二、极难伪造,安全性最高 |
生物特征的弱点:不可撤销——密码泄露可以改,指纹泄露却无法”换一个指纹”。因此生物特征通常作为辅助因素而非唯一凭证。
交叉认证(多因素认证 MFA)
以上三种认证方式,单独每一种的安全性都比较低:
- 你知道什么 → 可能被猜、被偷
- 你拥有什么 → 可能丢、可能被复制
- 你是什么 → 不可撤销,且存在伪造可能
采取交叉认证方式,取三大元素中的某两个或者三个,可以大大提高安全性——这就是多因素认证(MFA)。要求越多、跨越的因素类别越不同,安全性越高。
| 组合 | 示例 | 安全性 |
|---|---|---|
| 单因素 | 仅密码 | 低 |
| 双因素 | 密码 + 手机动态码(知识 + 持有) | 中高 |
| 三因素 | 密码 + 动态码 + 指纹(知识 + 持有 + 生物) | 高 |
MFA 的关键不是”多输入几次”,而是跨越不同类别。输入两个密码(都是知识要素)仍然是单因素;密码 + 动态码才是真正的双因素。
访问控制三大原则
无论采用哪种授权模型,访问控制的落地都应遵循三个基本原则——知其所需、最小特权、默认拒绝。
知其所需(Need to Know)
用户只应知道其工作必需的敏感信息,降低信息暴露面。
经典的例子是登录报错提示:用户登录输入错误时,提示”用户名或密码不正确”,而不是明确说”密码不正确”。如果只说密码错,就等于告诉攻击者”用户名是对的”,相当于帮黑客缩小了爆破范围。
知其所需 的本质是”控制信息的暴露范围”——你不知道”你不知道什么”,攻击者也就无从利用已知信息推进攻击。
最小特权(Least Privilege)
每个用户、进程、服务只被授予完成其任务所必需的最小权限,不多给一分。
- 普通用户不需要 root。
- 应用进程不需要管理员的全部权限。
- 权限用完即回收,离职即吊销。
最小特权与知其所需的区别:知其所需控制的是”信息可见性”,最小特权控制的是”操作权限”——前者管”知道什么”,后者管”能做什么”。
默认拒绝(Default Deny)
默认情况下拒绝所有访问,只对明确允许的对象放行。
提供白名单,不在白名单范围内的,全部为黑名单——而不是反过来。默认拒绝意味着即使出现配置疏漏,新加入的资源默认不可访问,安全兜底。
三个原则合起来就是一套纵深防御:白名单之外一律拒绝(默认拒绝),白名单之内的权限也尽量收敛(最小特权),敏感信息按需可见(知其所需)。
一次登录背后的 AAA 全流程
把三个 A 串起来,看一次完整的登录:
1. 用户输入密码 + 手机动态码
2. Authentication:校验两要素 → 确认"你是你" ← 认证
3. 系统加载该用户的角色与权限(RBAC)
4. Authorization:判断该用户能否访问请求的资源 ← 授权
5. 用户执行操作,系统记录操作日志
6. Audit:日志入库、行为监控、异常告警 ← 审计
实践建议
- 认证:生产环境强制 MFA(至少密码 + 动态码);密码用加盐哈希存储(如 bcrypt),绝不存明文;生物特征只做辅助因素。
- 授权:优先 RBAC 管理企业级权限;高安全场景叠加 MAC;第三方接入用 OAuth 2.0 + OIDC,不泄露用户密码。
- 审计:登录与权限变更必须留痕;日志集中采集、防篡改、定期巡检;敏感操作触发实时告警。
- 访问控制:统一遵循”默认拒绝 + 最小特权 + 知其所需”,登录报错模糊化,权限定期收敛。
速查小结
- 三个 A:认证(你是谁)→ 授权(你能做什么)→ 审计(你做了什么),顺序不可颠倒。
- 认证三要素:你知道什么(密码/PIN/密码短语)、你拥有什么(硬令牌/智能卡/USB 卡/手机 App)、你是什么(指纹/声纹/脸纹/虹膜)。
- MFA:跨类别组合两到三个要素,安全性显著提升。
- 授权模型:MAC(强制)、RBAC(角色)、OAuth(第三方开放授权)。
- 访问控制三原则:知其所需、最小特权、默认拒绝——白名单优先,权限最小化,信息按需可见。