跳至正文
来两杯美式
返回

身份安全三要素(AAA):认证、授权与审计

By 来两杯美式
发布于

这是一篇 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:授权

授权解决”你能做什么”的问题——在身份确认之后,决定该身份能访问哪些资源、执行哪些操作。授权模型主要有:

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)

每个用户、进程、服务只被授予完成其任务所必需的最小权限,不多给一分。

最小特权与知其所需的区别:知其所需控制的是”信息可见性”,最小特权控制的是”操作权限”——前者管”知道什么”,后者管”能做什么”。

默认拒绝(Default Deny)

默认情况下拒绝所有访问,只对明确允许的对象放行。

提供白名单,不在白名单范围内的,全部为黑名单——而不是反过来。默认拒绝意味着即使出现配置疏漏,新加入的资源默认不可访问,安全兜底。

三个原则合起来就是一套纵深防御:白名单之外一律拒绝(默认拒绝),白名单之内的权限也尽量收敛(最小特权),敏感信息按需可见(知其所需)

一次登录背后的 AAA 全流程

把三个 A 串起来,看一次完整的登录:

1. 用户输入密码 + 手机动态码
2. Authentication:校验两要素 → 确认"你是你"        ← 认证
3. 系统加载该用户的角色与权限(RBAC)
4. Authorization:判断该用户能否访问请求的资源       ← 授权
5. 用户执行操作,系统记录操作日志
6. Audit:日志入库、行为监控、异常告警              ← 审计

实践建议

速查小结


分享这篇文章:
通过邮件分享这篇文章✓ 链接已复制

上一篇
Python 知识系列(一):极简核心语法
下一篇
前端核心(四):React 必备 TS 语法速查