Web安全
基础漏洞
01前端基础【HTML】
02前端基础【CSS】
03后端基础【PHP速通】
04后端基础【PHP面向对象】
05MySQL基础操作
06前后端联动【代码练习】
07SQL注入【1】
07SQL 注入【2】
08SQL注入 Labs
08SQL注入速查表
09XSS
09跨站脚本攻击【XSS】
09XSS Labs
10跨站请求伪造【CSRF】
11服务器端请求伪造【SSRF】
12XML 外部实体注入【XXE】
13代码执行漏洞
14命令执行漏洞
15文件包含漏洞
16文件上传漏洞
17反序列化漏洞
18业务逻辑漏洞
19未授权访问漏洞集合
20跨源资源共享【CORS】
21SSTI模板注入
22并发漏洞
23点击劫持【Clickjacking 】
24请求走私
25路径遍历
26访问控制
27身份验证漏洞
28WebSocket
29Web缓存中毒
30HTTP 主机头攻击
31信息泄露漏洞
32原型污染
33NoSQL注入
API 安全
01web应用程序
02HTTP协议
03API概述
04分类类型
05交换格式
06身份验证
07常见API漏洞
08crAPI靶场
09JWT
10OAuth 2.0身份验证
11GraphQL【1】
11GraphQL【2】
12DVGA靶场
13服务器端参数污染
14API文档
15API Labs
16OAuth Labs
17GraphQL API Labs
18JWT Labs
小程序
小程序抓包
数据库
MySQL
Oracle
MongoDB
Redis
PostgreSQL
SQL server
中间件
Nginx
Apache HTTP Server
IIS
Tomcat
框架
ThinkPHP
Spring
Spring Boot
Django
访问控制
-
+
首页
10OAuth 2.0身份验证
## 一、定位 OAuth 2.0 是一个**开放授权框架(Open Authorization Framework)**(而非原生的身份验证协议),核心目标是解决 “第三方应用如何在用户授权下安全访问用户资源” 的问题。它的核心价值是 **“授权”**(明确 “允许访问什么资源”),而非直接的 “身份验证”(确认 “用户是谁”)。 例如:当你用 QQ 账号登录某音乐 APP 时,APP 不会获取你的 QQ 密码,而是通过 OAuth 2.0 向腾讯的授权服务器请求 “获取你的昵称和头像” 的权限。 腾讯验证你的身份并征得你同意后,向 APP 发放一个 “令牌”,APP 用令牌从腾讯的资源服务器获取你的信息 — 这一过程中,OAuth 2.0 解决的是 “授权 APP 访问资源”,而非直接验证你的身份(身份验证由腾讯的账号系统完成)。 ## 二、 核心角色 **资源所有者(Resource Owner)**:用户,拥有受保护资源(如个人信息、照片)的访问权限。 **客户端(Client)**:第三方应用(如 APP、网站),需要访问用户的资源。 按是否能安全保存凭据分为: - **机密客户端(Confidential Client)**:可安全存储 client_secret(如后端服务)。 - **公共客户端(Public Client)**:不能安全存储 client_secret(如浏览器、移动 App)。 **授权服务器(Authorization Server,AS)**:验证用户身份、处理授权请求、发放访问令牌(Access Token)、刷新令牌(Refresh Token)的服务器(如微信、QQ 的授权服务)。 **资源服务器(Resource Server,RS)**:存储用户(受保护)资源的服务器(如微信的用户信息服务器),需验证令牌有效性后提供资源访问(接受并验证 Access Token。)。 ## 三、核心令牌 **Access Token(访问令牌)** - 客户端访问受保护资源时使用。 - Bearer Token:谁持有谁能用,必须通过 TLS 保护。 **Refresh Token(刷新令牌)** - 用于换取新的 Access Token。 - 通常只发给机密客户端,或需要长时间会话的场景。 **ID Token(身份令牌)** - **不属于原始 OAuth 2.0**,而是 OIDC 扩展。 - JWT 格式,描述用户身份。 ## 四、授权模式 **1、授权码模式(Authorization Code Grant)** 最安全,适用于机密客户端(后端服务器)。 流程: 1. 客户端将用户引导至授权服务器登录。 2. 用户授权后返回授权码(code)。 3. 客户端用授权码向授权服务器换取 Access Token(需要 client_secret)。 改进版:加 PKCE(见后文)。 **2、授权码模式 + PKCE(Proof Key for Code Exchange)** 专为公共客户端(浏览器、移动端)设计,防止授权码被拦截。 额外步骤: - 客户端生成随机 code_verifier,派生出 code_challenge。 - 授权请求中带 code_challenge,换 token 时带 code_verifier。 - 授权服务器校验两者匹配。 **3、客户端凭据模式(Client Credentials)** 无用户参与,服务端到服务端调用(机器身份)。 客户端直接用 client_id + client_secret 换 Access Token。 **4、设备授权模式(Device Authorization Grant)** 针对没有浏览器/键盘的设备(如智能电视)。 用户在另一台设备输入授权码来完成授权。 **5、密码模式(Resource Owner Password Credentials, ROPC)** 用户直接将账号密码交给客户端。 不安全,**不推荐**,除非在极受信任的环境中。 **7、隐式模式(Implicit Grant)** Access Token 直接返回给浏览器(URL fragment 中)。 高风险(泄露、拦截),已被 OAuth 2.1 弃用。 ## 五、常见漏洞与攻击 **授权码拦截攻击** - 解决:使用 PKCE + 客户端认证。 **重定向 URI 注入 / Open Redirect** - 解决:redirect_uri 白名单 + 精确匹配。 **CSRF(缺失 state 校验)** - 解决:随机 state + 会话中校验。 **令牌泄露(存储/传输不安全)** - 解决:短期 token + HttpOnly Cookie + TLS。 **JWT 验证错误(alg:none / kid 注入)** - 解决:固定算法 + 从可信 JWKS 获取公钥。 **混淆攻击(IdP Mix-Up Attack)** - 解决:多 IdP 场景绑定 issuer 并验证。 ## 六、流程图 ### 6.1 授权码模式 + PKCE 流程  ### 6.2 刷新令牌流程  ### 6.3 使用 Access Token 访问资源  ### 6.4 全生命周期 展示 OAuth 2.0 中**Token 从生成到使用再到过期或撤销的整个生命周期**。 强调“**动态流程**”,按时间顺序显示事件和状态变化。 展示从用户授权 → 授权码 → Access Token → 使用资源 → Token 刷新 → Token 过期/撤销的完整流程。  ### 6.5 全景图 用于展示 OAuth 2.0 系统的整体架构、参与角色、主要组件和它们之间的关系。 强调“**静态结构**”而不是“时间顺序”,关注的是系统边界和安全信号。 
毛林
2025年9月8日 11:51
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码