news 2026/4/21 8:17:52

OAuth是什么?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
OAuth是什么?

OAuth是什么?

一、核心定义:它是什么,不是什么?

  • OAuth 是什么?
    OAuth 2.0是一个开放的授权框架(RFC 6749)。它的核心作用是:在不暴露用户密码给第三方应用的情况下,授权该应用访问用户在另一个服务提供商上的特定资源。

    • 关键词:授权(Authorization)。它解决的是“能做什么”的问题。
    • 核心场景:你用微信登录一个论坛(论坛是第三方应用),并授权论坛获取你的微信头像和昵称。在这个过程中,你没有把微信密码告诉论坛,论坛却通过微信(服务提供商)拿到了你的信息。这就是 OAuth 的典型应用。
  • OAuth 不是什么?

    1. 它不是认证协议(Authentication Protocol)。
      • OAuth 本身不负责证明“用户是谁”(认证),它只负责“用户同意授予某些权限”(授权)。然而,由于其授权流程天然包含了用户同意环节,它常被用作构建单点登录(SSO)系统的基础。为了实现完整的认证,业界通常使用基于 OAuth 2.0 扩展的OpenID Connect协议。
    2. 它不是万能的安全解决方案。
      • OAuth 提供了授权流程,但实现的安全性取决于开发者是否正确遵循最佳实践(如使用 HTTPS、安全存储令牌等)。

二、一个生动的比喻:公寓门禁(钥匙链)

想象一个高级公寓(服务提供商,如微信):

  • 你(资源所有者)是业主,拥有主钥匙(密码)可以进入所有房间(资源,如头像、好友列表)。
  • 现在,一个送餐员(第三方应用,如论坛)需要进入大厅(特定资源,如你的公开信息)把外卖给你。

传统危险方式:你把主钥匙(密码)复制一份给送餐员。风险极大,他可以进入你的卧室、打开你的保险柜。

OAuth 方式:

  1. 送餐员向公寓前台(授权服务器)申请一个“临时通行证”。
  2. 前台要求你本人亲自到场,确认“是否允许这个送餐员进入大厅,限时1小时”。
  3. 你同意后,前台发放一个限时、限区域的电子门禁卡访问令牌 Access Token)给送餐员。
  4. 送餐员用这张电子门禁卡刷卡进入大厅,完成送餐。他无法去其他区域,一小时后门禁卡自动失效。

这个过程中,你的主钥匙(密码)从未离开过你手,全程安全可控。

三、核心角色与核心概念

四大角色
  1. 资源所有者: 拥有受保护资源的实体,通常是最终用户
  2. 客户端: 想要访问资源的第三方应用(如论坛、手机App)。
  3. 资源服务器: 存储受保护资源的服务器(如存放微信用户数据的API服务器)。
  4. 授权服务器: 在认证资源所有者并获得其授权后,向客户端颁发访问令牌的服务器。常与资源服务器属于同一服务商(如都属于腾讯)。
两个核心令牌
  1. 访问令牌: 一个字符串,代表授予客户端的权限。客户端用它来向资源服务器请求数据。它是有作用域有效期的。
  2. 刷新令牌(可选,但常见)当访问令牌过期时,客户端可以用刷新令牌向授权服务器申请一个新的访问令牌,而无需用户再次授权。这提供了更好的用户体验,但需要更安全的存储。
一个关键概念:授权许可

授权许可是一个代表资源所有者授权的凭证,客户端用它来获取访问令牌。根据场景不同,有不同类型的授权许可,对应 OAuth 的四种授权流程

四、四种授权流程

OAuth 2.0 定义了四种“授权许可”类型,以适应不同的客户端类型和安全要求。

  1. 授权码模式

    • 最常用、最安全的模式,适用于有后端服务器的Web应用。
    • 流程
      1. 用户点击“用微信登录”,被重定向到微信授权页面。
      2. 用户在微信页面输入账号密码登录并同意授权。
      3. 微信将用户重定向回第三方应用的后端服务器,并附带一个授权码
      4. 第三方应用的后端用授权码+自己的应用密钥,向微信后台交换访问令牌
    • 关键:敏感的访问令牌始终在后台传输,不暴露给前端浏览器,非常安全。
    • 适用: 大多数网站、移动App(如果配合PKCE扩展)。
  2. 隐式模式

    • 简化模式,适用于纯前端单页应用,无后端服务器。
    • 流程: 与授权码模式类似,但授权服务器直接在前端重定向URI的片段中返回访问令牌。
    • 关键: 访问令牌暴露在浏览器URL和前端JavaScript中,安全性较低,易被截获。已被OAuth 2.1草案废弃,推荐使用带PKCE的授权码模式替代。
  3. 密码模式

    • 资源所有者密码凭证模式。用户直接将用户名和密码交给客户端应用,客户端应用用它去换取令牌。
    • 关键仅适用于高度信任的客户端(例如同一个公司开发的官方移动App)。因为用户需要把密码交给第三方,违背了OAuth“不分享密码”的初衷。一般不建议使用
  4. 客户端凭证模式

    • 机器对机器的授权,不涉及用户。
    • 场景: 一个后台服务需要访问另一个服务的API来同步数据。
    • 流程: 客户端应用直接用自己的身份(客户端ID和密钥)向授权服务器申请一个代表“应用自身”而非某个用户的访问令牌。
    • 关键: 用于访问受保护的、不属于特定用户的资源(如公共API)。

五、典型交互流程图(以授权码模式为例)

用户访问 第三方应用

点击“用微信登录”

重定向到
微信授权页面

用户在微信登录并授权

微信重定向回应用
附带授权码

应用后端用授权码+密钥
向微信请求访问令牌

微信返回访问令牌

应用用访问令牌
调用微信API获取用户数据

完成登录/获取资源

六、OAuth 与 OpenID Connect

这是最容易混淆的一点。

  • OAuth 2.0授权框架-> “这个应用可以获取我的微信好友列表吗?”
  • OpenID Connect: 在 OAuth 2.0 之上构建的认证层。它增加了一个重要的东西:ID Token
    • ID Token是一个遵循 JWT 标准的令牌,里面包含了用户的身份信息(如用户ID、姓名等)。
    • OIDC 流程: 在标准的 OAuth 授权码流程中,除了返回访问令牌,还会返回一个ID Token。客户端可以通过解析 ID Token 来可靠地认证用户的身份。
    • 结论: 现在常说的“用第三方登录”,底层技术通常是OAuth 2.0 + OpenID Connect。OAuth 负责授权获取资源的权限,OIDC 负责告知客户端“用户是谁”。

七、安全考虑与最佳实践

  1. 永远使用 HTTPS: 防止令牌在传输中被窃听。
  2. 妥善存储令牌: 访问令牌应存放在安全的地方(服务器内存、安全存储),避免前端 localStorage 存储敏感令牌。
  3. 使用范围最小的授权: 只请求应用真正需要的权限(作用域)。
  4. 验证重定向 URI: 授权服务器必须严格验证客户端注册的重定向URI,防止令牌被发送到恶意网站。
  5. 使用 PKCE: 对于移动应用和单页应用,即使使用授权码模式,也应加上 PKCE 扩展,防止授权码被拦截后冒用。
  6. 定期轮换密钥: 客户端应定期更换其客户端密钥。

总结

OAuth 是现代互联网授权领域的基石。它通过令牌机制,优雅地解决了“安全授权第三方应用”的难题,彻底改变了应用间集成的模式。理解 OAuth,关键在于区分授权 vs 认证,掌握其四大角色、两种令牌,并熟悉授权码模式这一最核心的流程。在实际应用中,它与OpenID Connect的结合,构成了当今“社交登录”和“单点登录”的事实标准。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 16:42:45

MC ε-Greedy 算法详解

MC ε-Greedy 算法详解 🎯 算法目标 寻找最优策略,是探索性初始(Exploring Starts)蒙特卡洛算法的推广版本。相比于严格要求每个状态-动作对都必须被选为初始的算法,本算法通过ε-Greedy策略保证了充分的探索。 📋 算法流程 1️⃣ 初始化阶段 初始化策略 π₀(a|s…

作者头像 李华
网站建设 2026/4/20 7:47:08

以太网终端主机常用的Command

1.使用ARP命令获取主机上所有活跃的IP和MAC地址,ARP全称是Adress Resolution Protocol。arp -a2.使用route命令获取主机上所有网关(网关就是路由)route print3.查询协议栈中所有active的套接字信息netstat -anoa 不仅显示正在通信的套接字&am…

作者头像 李华
网站建设 2026/4/18 21:54:33

企业级应用:Copilot在团队协作开发中的落地实践

企业级应用:Copilot在团队协作开发中的落地实践 关键词:AI代码助手、团队协作、开发效率、代码质量、企业级实践 摘要:本文从企业团队协作开发的真实痛点出发,结合GitHub Copilot等AI代码助手的核心能力,通过“故事引入…

作者头像 李华
网站建设 2026/4/18 9:41:40

大数据架构中的数据集成:CDC技术深度解析

大数据架构中的实时数据集成:CDC技术从原理到实践的深度解析 副标题:用DebeziumKafka构建高可靠实时数据管道 摘要/引言 在数字化转型的浪潮中,实时数据已成为企业的核心资产——电商需要实时更新库存以避免超卖,金融需要实时监控…

作者头像 李华
网站建设 2026/4/10 16:47:35

大数据可视化项目实战:从数据采集到展示

大数据可视化项目实战:从数据采集到展示 关键词:数据采集、数据清洗、数据存储、数据可视化、项目实战 摘要:本文以「小明的奶茶店数据运营」为故事主线,带您一步步走完大数据可视化项目的全流程——从采集销售数据到清洗整理&…

作者头像 李华