本文目录导读:
这是一个关于信息安全基础架构的核心问题。认证是确认“你是谁”,授权是决定“你能做什么”,两者是系统安全的两道大门。
下面为你详细拆解这两个概念,以及它们如何协同工作。
核心概念辨析
认证
- 定义:验证一个主体的身份是否真实有效的过程。
- 核心问题:你是谁?
- 通俗理解:像在机场出示护照和登机牌,证明你是“张三”这个人本人。
- 常见方式:
- 知识因素:你知道什么?如密码、PIN码、安全问题答案。
- 拥有因素:你有什么?如手机验证码、硬件U盾、门禁卡。
- 固有因素:你是什么?如指纹、人脸、虹膜、声纹等生物特征。
- 行为因素:你做什么?如打字节奏、鼠标移动轨迹(较少用但存在)。
- 重要概念:多因素认证,结合两种或以上不同因素进行认证,安全性远高于单一因素(密码+手机验证码)。
授权
- 定义:确定一个已经过认证的主体,拥有对哪些资源(如文件、API、功能模块)执行哪些操作(如读、写、删除、执行)的权限。
- 核心问题:你能做什么?
- 通俗理解:张三(已通过认证)作为“员工”,可以进入“办公区”(资源),但不能进入“财务室”;作为“管理员”,则可以进入“服务器机房”并执行“重启系统”操作。
- 常见模型:
- ACL:直接列出“谁”可以“做什么”,如“文件A:张三可读,李四可读写”。
- RBAC:将权限赋予“角色”,再将角色赋予用户,如“管理员角色”有“用户管理”权限;“张三”是“管理员”,这是最常用的模型。
- ABAC:基于用户、资源、环境(时间、地点、设备等)的属性,通过策略引擎动态判断,如“允许员工在上班时间(属性)从公司内网(属性)访问内部系统”。
认证与授权的典型流程
一个完整的访问过程通常是这样的:
sequenceDiagram
participant U as 用户
participant S as 系统
participant DB as 用户数据库
participant P as 权限策略
U->>S: 1. 提交凭证(用户名+密码)
S->>DB: 2. 验证凭证
DB-->>S: 3. 认证成功,返回用户ID和角色
Note over S: 用户已通过认证
U->>S: 4. 发起请求(如:增删某条数据)
S->>P: 5. 检查用户ID/角色是否有此操作权限
P-->>S: 6. 授权通过
S->>U: 7. 执行操作并返回结果
- 第1-3步:完成认证,系统知道了用户的身份。
- 第5-6步:完成授权,系统确认该身份有权限执行请求的操作。
- 如果第2步认证失败,流程终止(“账号或密码错误”)。
- 如果第6步授权失败,流程终止(“403 Forbidden”)。
常见实现技术
会话-Cookie
- 原理:用户认证成功后,服务器创建一个“会话”,并给浏览器一个包含会话ID的Cookie,后续请求带上Cookie,服务器通过会话ID找到用户信息(认证态)和权限(授权态)。
- 特点:有状态,服务器需要存储会话信息,适合传统Web应用。
JWT(JSON Web Token)
- 原理:用户认证成功后,服务器签发一个包含用户信息(如用户ID、角色)的JWT(一个加密的JSON字符串),客户端保存JWT,后续请求在
Authorization Header中带上JWT,服务器通过验证JWT的签名解析出用户信息。 - 特点:无状态,服务器无需存储会话,适合分布式系统、移动端、前后端分离应用。JWT本身是认证的令牌,但其中包含的角色/权限信息也常被直接用于授权判断。
OAuth 2.0 / OpenID Connect
- OAuth 2.0:一个授权框架,允许用户授权第三方应用访问其在另一个服务上的资源,而不需要给出密码,用微信登录(授权)第三方网站,微信不会把密码给第三方,而是给它一个临时的“门票”(Access Token)。
- OpenID Connect:在OAuth 2.0的基础上增加认证层,它让第三方应用不仅能获得授权,还能确认用户的身份。
- 关系:常被合称为现代身份验证与授权的标准协议,OAuth 2.0解决授权问题,OpenID Connect解决认证问题。
与“单点登录”的关系
- SSO不是一种独立的认证或授权机制,而是一种访问控制架构,它让用户只需登录一次,就能访问多个互相信任的应用系统。
- 实现SSO的核心依赖:SSO通常依赖中央认证服务来实现统一认证,并可能用到OAuth 2.0、SAML(安全断言标记语言)、JWT等标准协议来传递认证和授权信息。
总结对比表
| 特性 | 认证 | 授权 |
|---|---|---|
| 核心问题 | 你是谁? | 你能做什么? |
| 目标 | 验证身份 | 控制访问 |
| 顺序 | 先发生 | 后发生,依赖认证结果 |
| 常用技术 | 密码、生物识别、MFA | RBAC、ACL、ABAC、权限策略 |
| 失败响应 | 401 Unauthorized | 403 Forbidden |
| 示例 | 输入密码登录 | 管理员才能访问后台 |
一个关键点:在实践中,我们往往会直接称“认证授权(Auth)”,但内心要清楚,这通常是先“认”后“授”两个步骤的结合,JWT、OAuth、Session等都可以同时承载认证信息和授权信息(如角色、权限范围),但它们的职责定位不同,理解这个根本差异,是设计安全系统的起点。
标签: 授权