lab/note/资源/网络/认证.md
张育新 be711334fb docs(note): 添加笔记目录及 gitignore 规则
- 新增 note 目录包含 AI、SQL、Golang、网络等多领域学习笔记
- 更新 .gitignore 添加 note/assets/ 和 note/项目/ 忽略规则
2026-07-10 09:24:40 +08:00

92 lines
5.1 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 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 登录等) |