安全的本质不是技术堆砌,而是对"信任"的工程化建模。 认证与授权,就是在网络世界中构建信任关系的核心机制。
在计算机安全领域,一切访问控制都可以被抽象为三个最基本的问题:
这三者构成了安全体系的最小闭环:
认证 → 生成凭证 → 授权决策
无论是:
本质上都在回答这三个问题,只是解决场景与边界不同。
认证的本质是:
在不可信的网络环境中,建立"主体身份"与"真实个体"的可信映射。
认证并不是单纯的"登录",而是一种信任建立过程。
所有认证方式,都可以归为三类:
| 类别 | 本质 |
|---|---|
| 知识认证 | 你知道什么(密码、密钥) |
| 持有认证 | 你拥有什么(Token、证书) |
| 特征认证 | 你是什么(指纹、人脸) |
认证技术的发展,本质是为了解决三个核心矛盾:
最早的认证发生在单系统场景:
HTTP 协议层提供了标准化的认证框架:
WWW-Authenticate → Authorization
流程模型:
客户端 → 服务端:请求资源
服务端 → 客户端:需要认证
客户端 → 服务端:携带凭证
服务端 → 客户端:允许或拒绝
这代表的是一种最原始的挑战-响应模型。
由于 HTTP 认证灵活性不足,大部分系统转向了:
表单认证
其本质是:
这带来了更大的灵活性,但也意味着:
认证从"协议标准"变成了"工程问题"
当系统从单体走向多系统,新的问题出现:
如何避免用户在多个系统中反复登录?
这催生了一个目标:
SSO 的本质不是技术,而是一种目标:
一次认证,多处信任
统一认证中心 + 分散业务系统
CAS 是一种典型的 SSO 实现框架。
其核心机制是:
三个核心对象:
| 概念 | 本质 |
|---|---|
| TGT | 身份凭证 |
| TGC | 客户端 Cookie |
| ST | 一次性票据 |
CAS 的本质:
用中心化的票据机制,实现跨系统身份传递
当互联网规模进一步扩大,需要跨组织认证时:
于是出现:
OIDC = 认证标准化
OIDC 的本质:
如果说认证解决:
"你是谁"
那么授权解决:
"你能做什么"
授权本质上是一个三元关系:
主体(Subject)
↓
权限(Permission)
↓
资源(Resource)
典型代表:Linux 文件权限
本质:
权限属于资源,而非系统
核心思想:
用户 → 角色 → 权限 → 资源
RBAC 的本质创新:
用"角色"解耦用户与权限
这是目前企业系统中最常见的模型。
基于规则或属性的访问控制:
不再只看"你是谁"
还看:
本质:
从静态权限走向动态决策
强调:
常见于高安全领域。
认证和授权的结果,需要一种载体来传递:
这就是凭证(Credential)
最经典的状态模型:
客户端 Cookie → 服务端 Session
优点:
缺点:
JWT 的本质:
将状态"自包含化"
它解决的问题是:
优点:
缺点:
OAuth2 并不是认证协议,而是:
授权协议
它解决的问题是:
第三方应用如何安全地访问用户资源
四个角色:
本质:
将"用户授权"工程化
| 模式 | 本质 |
|---|---|
| 授权码模式 | 最安全 |
| 隐式模式 | 纯前端场景 |
| 密码模式 | 高信任场景 |
| 客户端模式 | 无用户场景 |
认证与授权的底层,是密码学。
客户端加密的本质不是传输安全,而是:
防止服务端被动暴露明文
Bcrypt 的设计思想:
本质:
通过时间成本对抗算力进步
当系统从"内部系统"变为"开放平台",安全模型发生变化:
核心要素:
本质:
构建受控的信任边界
在微服务中,认证问题转化为:
服务与服务之间的信任问题
常见策略:
核心原则:
边界内信任,边界外验证
最后,将所有内容抽象为一个统一框架:
安全体系
├─ 认证
│ ├─ 本地认证
│ ├─ 联邦认证
│ └─ SSO
├─ 授权
│ ├─ DAC
│ ├─ RBAC
│ ├─ ABAC
│ └─ MAC
├─ 凭证
│ ├─ Session
│ ├─ Token
│ └─ JWT
└─ 协议
├─ OAuth2
└─ OIDC