92 lines
5.1 KiB
Markdown
92 lines
5.1 KiB
Markdown
## Cookie
|
||
|
||
| 维度 | 说明 |
|
||
| :----------- | :----------------------------------------------------------- |
|
||
| **本质** | 存储在浏览器端的一小段文本数据(通常 4KB 以内) |
|
||
| **核心机制** | 浏览器在每次 HTTP 请求中**自动携带**符合域名/路径规则的 Cookie |
|
||
| **关键属性** | `HttpOnly`(防 JS 读取)、`Secure`(仅 HTTPS)、`SameSite`(防 CSRF)、`Expires/Max-Age` |
|
||
| **定位** | **传输载体,而非认证方案本身**——它负责把令牌(Session ID 或 Token)在客户端和服务器之间来回搬运 |
|
||
|
||
**优点**:
|
||
|
||
- 简单成熟,几乎所有 Web 框架默认集成
|
||
- 服务端可随时销毁会话,控制力强
|
||
- 敏感信息存在服务端,不暴露给客户端
|
||
|
||
**缺点**:
|
||
|
||
- 扩展性受限——多服务器需共享 Session(引入 Redis 等外部存储)
|
||
- 依赖 Cookie,纯移动端/非浏览器环境不友好
|
||
- 容易受到 CSRF 攻击(需额外防护)
|
||
|
||
## Session
|
||
|
||
| 维度 | 说明 |
|
||
| :----------- | :----------------------------------------------------------- |
|
||
| **本质** | 服务器端维护的用户会话数据(通常以 Map 结构存在内存、Redis 或数据库中) |
|
||
| **认证流程** | 用户登录 → 服务器创建 Session → 将 Session ID 通过 `Set-Cookie` 返回 → 浏览器后续请求自动携带该 Cookie → 服务器通过 Session ID 查找会话数据验证身份 |
|
||
| **核心特点** | **有状态**:服务器持有用户上下文,可随时主动吊销 |
|
||
| **定位** | 经典的**服务端主导**的认证方式,适合传统 Web 应用和前后端未彻底分离的场景 |
|
||
|
||
**优点**:
|
||
|
||
- 简单成熟,几乎所有 Web 框架默认集成
|
||
- 服务端可随时销毁会话,控制力强
|
||
- 敏感信息存在服务端,不暴露给客户端
|
||
|
||
**缺点**:
|
||
|
||
- 扩展性受限——多服务器需共享 Session(引入 Redis 等外部存储)
|
||
- 依赖 Cookie,纯移动端/非浏览器环境不友好
|
||
- 容易受到 CSRF 攻击(需额外防护)
|
||
|
||
## JWT
|
||
|
||
| **本质** | 一段经过签名(或加密)的 JSON 数据,由 Header、Payload、Signature 三部分组成,以 Base64URL 编码 |
|
||
| ------------ | ------------------------------------------------------------ |
|
||
| **认证流程** | 用户登录 → 服务器验证凭据并签发 JWT → 客户端存储 Token → 后续请求在 `Authorization: Bearer <token>` 头中携带 → 服务器**仅验证签名和有效期**,无需查库 |
|
||
| **核心特点** | **无状态**:Token 自身包含用户身份信息,服务器不需要维护会话 |
|
||
| **定位** | 现代**前后端分离架构**和**多端(Web/iOS/Android)统一接入**的事实标准 |
|
||
|
||
**优点**:
|
||
|
||
- 天然无状态,服务端可随意水平扩展
|
||
- 不依赖 Cookie,可用于移动端、小程序等非浏览器环境
|
||
- 跨域友好(CORS 场景下比 Cookie 更灵活)
|
||
- Payload 可携带少量业务数据,减少数据库查询
|
||
|
||
**缺点**:
|
||
|
||
- Token 一旦签发,在过期前无法主动撤销(需引入黑名单/版本号等机制)
|
||
- Payload 仅 Base64 编码(非加密),敏感信息绝对不能放入
|
||
- Token 体积比 Session ID 大,每次请求都传输有一定带宽开销
|
||
|
||
## SSO
|
||
|
||
| 维度 | 说明 |
|
||
| :----------- | :----------------------------------------------------------- |
|
||
| **本质** | 一种架构模式,通过**统一的认证中心(IdP)**,让用户在多个独立系统间共享登录状态 |
|
||
| **认证流程** | 用户访问应用A → 重定向到 SSO 认证中心 → 登录并获取令牌 → 带回令牌访问应用A → 再访问应用B时,认证中心识别已登录状态,直接放行 |
|
||
| **常见实现** | CAS、SAML、OAuth 2.0 + OpenID Connect |
|
||
| **定位** | **企业级、多系统生态**的统一身份认证方案 |
|
||
|
||
**优点**:
|
||
|
||
- 用户体验极佳:一次登录,访问所有关联系统
|
||
- 集中管理:统一账号体系、权限策略、安全审计
|
||
- 安全性提升:减少密码泄露面,可配合多因素认证(MFA)
|
||
|
||
**缺点**:
|
||
|
||
- **单点故障风险**:认证中心一旦宕机,所有系统登录受影响
|
||
- 实现复杂:涉及协议配置、令牌传递、跨域重定向等
|
||
- 对认证中心的高可用要求极高
|
||
|
||
## OAuth 2.0
|
||
|
||
| 维度 | 说明 |
|
||
| :----------- | :----------------------------------------------------------- |
|
||
| **本质** | 一种**授权框架**(而非纯粹的认证协议),允许用户授权第三方应用在**不暴露自己密码**的情况下访问受保护资源 |
|
||
| **核心角色** | 资源拥有者(用户)、客户端(第三方应用)、授权服务器、资源服务器 |
|
||
| **核心流程** | 用户授权 → 第三方获取授权码 → 换取 Access Token → 持 Token 访问资源 |
|
||
| **定位** | **第三方接入**和**开放平台**的标准授权方案(微信登录、Google 登录等) | |