OAuth2.0 详解+案例

目录

一、OAuth 2.0 的核心角色

二、OAuth 2.0 的核心流程(简化版)

三、OAuth 2.0 的 4 种核心授权模式

1. 授权码模式(Authorization Code Flow)—— 最安全、最常用

2. 简化模式(Implicit Flow)—— 无后端客户端专用

3. 密码模式(Resource Owner Password Credentials Flow)—— 高信任场景专用

4. 客户端模式(Client Credentials Flow)—— 无用户场景专用

四、OAuth 2.0 的关键令牌:Access Token 与 Refresh Token

五、OAuth 2.0 与 OpenID Connect(OIDC)的区别

六、OAuth 2.0 的安全注意事项

以电商平台为案例:OAuth 2.0 的实际应用与流程拆解

一、核心场景 1:第三方登录(用户端)—— 授权码模式

以 “某电商平台(客户端)接入微信登录” 为例,完整流程拆解

前提准备(电商平台侧)

具体流程(用户视角 + 技术视角)

该场景的核心价值

二、核心场景 2:第三方服务授权(商家端)—— 授权码模式 / 客户端模式

子场景 1:商家授权电商平台接入支付宝支付(授权码模式)

简化流程

子场景 2:电商平台调用菜鸟物流的 “公共物流节点查询” 接口(客户端模式)

简化流程

三、电商场景中 OAuth 2.0 的关键安全细节

四、OAuth 2.0 对电商平台的核心价值

OAuth 2.0 是目前最主流的授权框架(注意:是 “授权” 而非 “认证”),其核心作用是让第三方应用(如小程序、第三方网站)在不获取用户账号密码的前提下,安全地获取用户在某平台(如微信、淘宝、GitHub)上的部分资源访问权限(如读取用户头像、获取订单信息)。

它解决了传统 “账号密码共享” 模式的安全风险(如第三方应用泄露密码、过度获取权限),被广泛应用于社交登录、开放平台接口调用等场景。

一、OAuth 2.0 的核心角色

理解 OAuth 2.0 的第一步是明确参与流程的 4 个核心角色,所有交互都围绕这 4 个角色展开:

角色名称 英文全称 核心职责 举例
资源所有者 Resource Owner 拥有资源的用户,能授予第三方应用访问权限 使用 “微信登录某购物小程序” 的你
客户端 Client 需要访问用户资源的第三方应用 上述的 “购物小程序”
授权服务器 Authorization Server 资源所有者平台(如微信)提供的服务器,负责验证用户身份、发放 “授权凭证” 微信的授权服务器(处理登录授权请求、生成 token)
资源服务器 Resource Server 存储用户资源的服务器,仅接受 “授权凭证”(如 token)请求资源 微信的用户信息服务器(存储你的头像、昵称,需 token 才能读取)

二、OAuth 2.0 的核心流程(简化版)

OAuth 2.0 的流程本质是 “客户端通过授权服务器获取授权凭证,再用凭证向资源服务器请求资源”,核心步骤可简化为 4 步:

  1. 客户端请求授权:用户在客户端(如购物小程序)点击 “微信登录”,客户端跳转至授权服务器(微信授权页),请求用户授予 “读取头像昵称” 的权限。
  2. 用户授予授权:用户在授权服务器页面确认授权(如点击 “允许”)。
  3. 授权服务器发放凭证:授权服务器验证用户身份后,向客户端发放 “授权凭证”(通常是 Access Token)。
  4. 客户端请求资源:客户端携带 Access Token 向资源服务器(微信用户信息接口)发起请求,资源服务器验证 Token 有效后,返回用户头像、昵称等资源。

三、OAuth 2.0 的 4 种核心授权模式

OAuth 2.0 并非单一流程,而是根据客户端的安全级别(如是否有服务器、是否能存储密钥)设计了 4 种授权模式,最常用的是前两种:

1. 授权码模式(Authorization Code Flow)—— 最安全、最常用

适用场景:有后端服务器的客户端(如传统网站、APP 后端),因为客户端能安全存储 “客户端密钥”(Client Secret),避免密钥泄露。核心特点:通过 “授权码”(Authorization Code)间接获取 Access Token,而非直接获取,安全性最高。典型流程

  • 客户端(网站后端)跳转用户至授权服务器,携带 “客户端 ID、请求权限、回调地址”;
  • 用户授权后,授权服务器跳转回 “回调地址”,并携带授权码
  • 客户端后端用 “授权码 + 客户端密钥” 向授权服务器请求 Access Token;
  • 授权服务器验证通过后,返回 Access Token(可选附带 Refresh Token)。举例:GitHub 第三方登录、支付宝开放平台接口调用。
2. 简化模式(Implicit Flow)—— 无后端客户端专用

适用场景:无后端的纯前端应用(如 Vue/React 单页应用、前端静态页面),无法安全存储 “客户端密钥”。核心特点:不通过 “授权码”,直接返回 Access Token,但不返回 Refresh Token(因前端存储 Token 风险较高)。典型流程

  • 客户端(前端)跳转用户至授权服务器,携带 “客户端 ID、请求权限、回调地址”;
  • 用户授权后,授权服务器直接将 Access Token 拼接在 “回调地址” 的 URL 中,返回给客户端;
  • 客户端从 URL 中提取 Access Token,用于请求资源服务器。风险提示:Token 暴露在 URL 中,可能被日志、浏览器历史记录泄露,需搭配 HTTPS 和短期 Token 降低风险。
3. 密码模式(Resource Owner Password Credentials Flow)—— 高信任场景专用

适用场景:客户端与资源所有者平台高度信任(如平台自家的 APP),用户愿意向客户端提供账号密码。核心特点:用户直接向客户端提供账号密码,客户端用 “用户账号密码 + 客户端 ID” 向授权服务器请求 Access Token。风险提示:客户端获取了用户的原始密码,违背 OAuth “不共享密码” 的核心设计,仅在极端信任场景使用(如企业内部系统)。举例:某公司自家 APP 用 “员工企业邮箱账号密码” 获取内部系统的访问权限。

4. 客户端模式(Client Credentials Flow)—— 无用户场景专用

适用场景:客户端自身需要访问资源服务器的 “公共资源”(无需用户授权),如客户端获取平台的公共 API 数据(如天气、新闻列表)。核心特点:无用户参与,客户端直接用 “客户端 ID + 客户端密钥” 向授权服务器请求 Access Token,Token 仅代表 “客户端身份”,不关联用户。举例:某天气 APP 用自身的 “客户端密钥” 向天气平台请求全国天气数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心态特好

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值