侧边栏壁纸
  • 累计撰写 147 篇文章
  • 累计创建 0 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

OAuth 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 流程

1授权码模式 + PKCE 流程图

6.2 刷新令牌流程

2刷新令牌流程图

6.3 使用 Access Token 访问资源

3使用 Access Token 访问资源流程图

6.4 全生命周期

展示 OAuth 2.0 中Token 从生成到使用再到过期或撤销的整个生命周期

强调“动态流程”,按时间顺序显示事件和状态变化。

展示从用户授权 → 授权码 → Access Token → 使用资源 → Token 刷新 → Token 过期/撤销的完整流程。

5全生命周期流程

6.5 全景图

用于展示 OAuth 2.0 系统的整体架构、参与角色、主要组件和它们之间的关系。

强调“静态结构”而不是“时间顺序”,关注的是系统边界和安全信号。

4OAuth 2.0 全景图

2
博主关闭了所有页面的评论