news 2026/3/20 18:38:13

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/3/19 13:10:03

jsp蛋糕甜品店管理系统4fx6j--(程序+源码+数据库+调试部署+开发环境)

本系统(程序源码数据库调试部署开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。 系统程序文件列表 用户,商品分类,商品尺寸,商品信息 开题报告内容 一、研究背景及意义 随着互联网的普及和消费者购物习惯的改变&…

作者头像 李华
网站建设 2026/3/18 4:04:32

PADS 多层板设计时怎么设置满足3W间距 或 不在某参考层布线

如何设置满足3W间距 在router中 右键选择网络 双击你要设置的网络 弹出 选择安全间距给这个网络添加一个特殊安全间距 比如其3w需10mil 我就 这样其与其他导线的安全距离就为10mil了 你布线时drc打开一不满足就会报错提示你 设置在参考层内不布线 如果你想要在哪个网络不…

作者头像 李华
网站建设 2026/3/15 13:21:27

省心绘制财务核算流程图零门槛操作画图超便捷高效

做财务工作的朋友,大概率都有过这样的困扰:领导让画一份财务核算流程图,自己要么不会用专业工具,要么工具操作太复杂,画一张图要耗费大半天时间;新手入门更是无从下手,对着空白画布不知道从何开…

作者头像 李华
网站建设 2026/3/16 3:16:13

博泰车联网智能座舱 Android 开发工程师的核心能力与实战挑战

博泰车联网科技(上海)股份有限公司 Android 应用开发工程师 职位信息 岗位职责: ① 参与需求分析,与产品、设计团队协同,精准把握智能座舱应用业务与用户需求; ② 开展性能优化,内化用户、CPU等关键指标,编写测试计划并执行多种测试,保障应用稳定; ③ 参与模块方案…

作者头像 李华
网站建设 2026/3/20 9:54:54

VastBase 高可用集群完整操作报告

目录标题 VastBase 高可用集群完整操作报告目录架构概览组件层次结构命令映射关系当前集群状态 增加备库详细流程一、K8s CRD 层面1.1 查看当前配置1.2 指定新备库调度节点(可选)1.3 增加 masterReplicas 二、K8s StatefulSet 层面2.1 StatefulSet 创建2…

作者头像 李华