什么是 OAuth(开放授权)?

2024 年 7 月 29 日

作者

Gregg Lindemulder

Staff Writer

Matt Kosinski

Writer

什么是开放授权 (OAuth)?

开放授权 ( OAuth ) 是一种开放标准授权框架,它授予应用程序访问最终用户受保护资源(例如其照片、日历或社交媒体帖子)的权限,而无需用户帐户的登录名或密码。

要求用户“使用 Google 登录?”或“允许访问您的账户信息?”的网站和第三方应用程序。是 OAuth 的常见用例。通过 OAuth 协议,用户可以在不共享其用户凭证的情况下,轻松授予这些应用程序访问其账户数据的权限。

除了 Web 应用程序之外,OAuth 还可以授予对 API、服务器端应用程序、操作系统本地应用程序、移动应用程序以及智能电视和家电等设备授予资源访问权限。在某些情况下,由于 OAuth 可以代表组织或企业账户授权应用程序访问,因此不需要人类用户的参与。

男子正在看电脑

增强安全情报


每周在 Think 时事通讯中获取有关安全、AI 等的新闻和洞察分析,从而预防威胁。

OAuth 为什么重要?

OAuth 通过防止登录数据被访问并限制对其他敏感信息的访问,为用户、开发人员和企业提供了重要的访问管理优势。它还能让应用程序更轻松地访问必要的账户信息,而不会出现共享用户凭据的安全漏洞。

通过简化安全访问,OAuth 可以帮助组织应对一些最大的安全挑战。例如,IBM 商业价值研究院的一项研究发现,52%的高管表示复杂性是其网络安全运营的最大障碍。

一个由软件开发人员组成的小团队于 2007 年发布了 OAuth 1.0。该协议的第一个版本是作为网络身份验证的替代方案而设计的,因为 Web 身份验证要求用户与第三方服务共享用户名和密码。但是,OAuth 1.0 仅为网站提供授权流程。

2012 年,互联网工程任务组 (IETF) 发布了 OAuth 2.0,即 RFC 6749 和 RFC 6750。RFC(请求意见稿)是描述互联网通信协议的 IETF 文档。RFC 6749 是 OAuth 2.0 的核心框架,而 RFC 6750 则定义了该框架如何使用访问令牌。

此更新版本的 OAuth 将协议扩展到了 Web 浏览器之外,包括应用程序、应用程序接口和设备的授权功能。OAuth 2.0 取代了 OAuth 1.0,现已成为行业标准。

Mixture of Experts | 4 月 25 日,第 52 集

解码 AI:每周新闻摘要

加入我们由工程师、研究人员、产品负责人等组成的世界级专家团队,他们将突破 AI 的喧嚣,为您呈现最新的 AI 新闻和洞察分析。

OAuth 的工作原理

与其他依赖用户名和密码的框架不同,OAuth 是一种基于访问令牌的授权协议。访问令牌是确定允许应用程序访问的特定资源的信息片段。OAuth 协议定义了授权请求流程中每个组件如何批准、定义和管理访问令牌。

OAuth 令牌通常使用 JSON Web 令牌 (JWT) 标准,因为它能安全地传输数据。

OAuth 框架的主要组件包括:

  • 资源所有者
  • 资源服务器
  • 客户
  • 授权服务器
  • 确定范围
资源所有者

这是应用程序要访问的账户(如 Facebook 或 Google 账户)的最终用户。资源所有者同意应用程序访问该账户中的某些受保护资源,如照片或个人数据。在某些情况下,资源所有者可能是公司或企业账户。

资源服务器

这是代表用户存储受保护资源的服务器。资源服务器接受并验证从客户端收到的 OAuth 令牌,然后提供资源所有者同意发布的用户数据。

客户

客户端是请求访问的应用程序、网站、应用程序接口或设备。它通过提交客户端 ID 向授权服务器申请授权。然后,在资源所有者同意后,客户端会收到一个访问令牌,可以用来访问资源服务器上受保护的资源。

授权服务器

这是驱动 OAuth 协议的主要服务器。它通过两个端点来授予对资源服务器的访问权限。

 授权端点 会提示资源所有者同意使用特定的受保护资源。然后, 令牌端点 接收来自 OAuth 客户端的令牌请求,并生成新的访问令牌,授予对资源的访问权限。

作用域

作用域是资源服务器上受保护资源的访问参数。

例如,可能会要求资源所有者同意访问电子邮件、文件或照片等数据。该作用域限制客户只能访问这些项目。

OAuth 流程示例

以下是 OAuth 流程如何运行的基本概述:

  1. Jim( 资源所有者)希望允许社交媒体网站(客户端)访问他的电子邮件联系人(资源)。

  2. 电子邮件 授权服务器会提示 Jim 同意此访问权限。

  3. 在获得吉姆的同意后,授权服务器会向社交媒体网站提供一个访问令牌。

  4. 社交媒体网站向存储 Jim 电子邮件帐户信息的资源服务器发送访问令牌。

  5. 资源服务器会识别访问令牌,并允许社交媒体网站访问 Jim 的电子邮件联系人。由于访问令牌包括 Jim 的同意范围,因此社交媒体网站无法访问 Jim 账户中的任何其他数据。

OAuth 授权类型

向应用程序提供访问令牌的过程称为授权授予授权流程。不同类型的应用程序、设备或应用程序接口可使用不同的授权类型和 OAuth 流程,例如:

  • 授权代码
  • 代码交换证明密钥 (PKCE)
  • 客户端凭证
  • 隐式授权
  • 刷新令牌

授权代码

此授权类型通常用于 Web 应用程序和移动应用程序。在授权代码流程中,授权服务器向客户端提供一次性授权代码。然后,客户端可以从授权服务器的令牌端点将授权代码换成访问令牌。

代码交换证明密钥 (PKCE)

此流程为授权代码授予增加了额外的安全性,以保护应用程序免受代码注入攻击。这类攻击会诱使应用程序运行恶意代码,从而改变其运行方式。

PKCE 添加了一个“客户端密钥”,用于在发放访问令牌之前向授权服务器验证客户身份。由于只有合法客户端才拥有该秘密,恶意行为者无法冒充客户端并引入恶意代码。

客户端凭证

此类授权适用于不涉及人类用户的情况,例如自动化流程、机器对机器交互和微服务。

应用程序被授予访问执行功能所需的系统资源的权限,但无权访问最终用户资源。例如,客户端凭据可能允许天气应用程序访问 API 以检索有关最新预报的数据。

隐式授权

此授权类型为 JavaScript 网络应用程序提供了更简单的流程。与授权码授权不同,隐式流程在发放访问令牌前不需要授权码。

相反,在用户提供同意后,访问令牌会包含在重定向 统一资源标识符  (URI) 中,该标识符将用户返回到请求访问的应用程序。应用程序从 URI 获取访问令牌。

刷新令牌

如果访问令牌已过期,此授予类型会为应用程序提供一个可兑换新访问令牌的刷新令牌。如果没有刷新令牌,最终用户就必须再次表示同意,应用程序才能收到新的访问令牌。

SSO 和 OAuth 有什么区别?

两者的根本区别在于,单点登录 (SSO) 是一种用户身份验证协议,而 OAuth 是一种授权协议。

SSO 通常使用身份提供者 (IdP) 和 基于可扩展标记语言(XML) 的 安全断言标记语言  (SAML),通过用户名和密码验证用户的数字身份。

OAuth 不会对用户进行身份验证,但会授权用户访问系统资源。SSO 解决方案有时会使用 OAuth,使经过身份验证的用户能够轻松访问整个企业的应用程序和服务。

什么是 OpenID Connect?

OpenID Connect (OIDC) 是一种建立在 OAuth 2.0 基础上的身份验证协议。OpenID Connect 可以协同工作,验证用户的身份,然后 OAuth 可以授权该用户访问资源和服务。

相关解决方案
IBM Verify:IAM 解决方案

实现身份信息现代化并完善现有身份识别工具,同时为任意身份访问位于本地、云端或作为 SaaS 的 AI、应用程序及资源提供安全、顺畅的访问体验。

深入了解 Verify
企业安全解决方案

探索智能企业安全解决方案和服务,帮助企业现在就做好准备,从容应对未来需要面临的网络安全威胁。

深入了解网络安全解决方案
身份和访问管理 (IAM) 服务

凭借身份与安全专家的技能、策略和支持,让您的员工队伍和消费者 IAM 计划迈向成功。

    深入了解 IAM 服务
    采取后续步骤

    了解 IBM Verify,这是一种领先的 IAM 平台,提供 AI 驱动的功能来管理员工队伍和客户需求。

    深入了解 Verify 发现 Verify Identity Protection