所有文章 > API产品 > 什么是 OAuth 2.0 以及它如何工作?
什么是 OAuth 2.0 以及它如何工作?

什么是 OAuth 2.0 以及它如何工作?

什么是 OAuth?

OAuth 2.0 是一个开放标准授权框架,允许不相关的服务安全地允许经过身份验证的访问其资产,而无需共享一些关键的中心凭证 – 即所有者的密码。

OAuth 的工作原理是授予访问数据的权限而不是提供身份证明,这意味着它是一种授权协议而不是身份验证协议。

用户授权透露哪些个人信息。OAuth 通过 HTTPS 工作,授权服务器、设备、API 和应用程序。它使用短期访问令牌而不是密码。

为了更好地理解 OAuth 的用途,您可以考虑一下经常被提及的代客泊车钥匙类比。如今,许多豪华汽车都配备了一把特殊钥匙,仅供停车场服务员使用。

与标准钥匙不同,“代客钥匙”可以启动汽车,但无法进入车辆的某些区域,如后备箱或手套箱。这种钥匙也无法让车辆行驶超过一小段距离 – 最高速度也受到限制。

OAuth 基于代客密钥原则,允许您(用户)向第三方网站授予对您的私人资源的有限访问权限,而无需共享您的身份或密码。

为什么 OAuth 会成为行业规范

直到 2007 年底,API 访问指定才有了开放标准。要连接网站,您需要提供用户名和密码。到目前为止,一切顺利。但如果另一个网站参与其中(这种情况经常发生),第二个网站也需要它们。

把密码交给别人不仅麻烦而且危险。现在,你的密码落入坏人手中的几率已经翻倍了。 

幸运的是,OAuth 1.0 和现在的 2.0 可以消除对所有密码的需求,并将这些网站限制为必要的功能。 

从更实际的角度来看,除了上述单点登录示例之外,OAuth 还可以轻松完成一些操作,例如将手机上的图片和视频发布到社交媒体以及使用亚马逊账户支付在线购物费用,而无需输入信用卡信息。 

每次您授予某个应用访问手机摄像头的权限或允许浏览器插件访问您的 Google 帐户时,您都会看到 OAuth 发挥作用。基本上,与 OAuth 相关的功能列表可以让我们的生活更加轻松,这是详尽无遗的。

OAuth 1.0 与 OAuth 2.0 

如今,当开发人员提到 OAuth 时,他们指的是 OAuth 2.0。事实上,这两个版本相差太大,以至于不兼容。这两个程序可以单独运行,尽管这种情况越来越少见。 

为了理解这些区别,了解一些澄清和历史可能会有所帮助。

2007 年末,OAuth 1.0 以基于数字签名的框架面世。它可靠、安全,并迅速被 Google 和 Twitter 等公司所接受。缺点是:OAuth 1.0 意味着加密实现和加密互操作性,这对许多开发人员来说是一个挑战。 

2012 年 10 月发布的 OAuth 2.0 完全不同。此新版本不向后兼容 OAuth 1.0 或 1.1,并且加密不再是系统的一部分。 

OAuth 2.0 版本依靠访问令牌来避免密码需求,从而使授权变得更容易、更灵活,并且站点和设备之间的互操作性更强。

OAuth 2.0 取代了其前身,成为许多公司的首选解决方案,包括 Facebook、Microsoft、Twitter、Google 和 Mozilla。

总结一下差异:

  • OAuth 1.0 使用复杂的加密图形,仅支持三种流程,并且无法扩展。
  • OAuth 2.0 有六种流程,可满足各种需求和应用,并支持通过 HTTPS 签名机密。OAuth 2.0 令牌无需在端点上加密,但可在传输过程中加密。  

工作原理:OAuth 2.0 的构建模块

工作原理:OAuth 2.0 的构建模块

在讨论各个组件之前,让我们先看看当用户发起涉及另一个不相关网站或服务的网站操作时发生的事件顺序。假设用户已使用 HTTPS 登录到第一个网站。

  1. 站点 A 使用 OAuth 2.0 与站点 B 连接,提供用户的验证身份。
  2. 站点 B 发布一次性请求令牌以及唯一的密钥。  
  3. 站点 A 将令牌和秘密发送给用户的客户端软件。
  4. 客户端软件将请求令牌发送给授权提供商(OAuth 的主引擎)。 
  5. 如果由于任何原因,提供商未进行身份验证,则要求客户批准站点 B 的身份验证。
  6. 用户(或用户软件)在现场批准特定类型的交易 A。
  7. 请求令牌现在成为已批准的访问令牌并授予用户。
  8. 反过来,用户将批准的访问令牌提供给站点 A。
  9. 站点 A 现在将访问令牌提供给站点 B。这证明了身份验证。
  10. 站点 B(最后)代表用户允许站点 A 访问。
  11. 任务完成。

关于 OAuth 2.0 工作原理的讨论很容易变得非常技术化。从高层次来看,基本构建块及其功能分为五个核心组件。

  1. 范围和同意
  2. 参与者
  3. 客户端
  4. 令牌
  5. 流程

现在,让我们更详细地分解每个组件。

1. 范围和同意

范围是一种定义权限并为应用程序或服务可以访问或不能访问的内容设置边界的机制。

当应用程序发送授权请求时,会向用户显示请求的具体范围,并且用户必须授权同意。 

此同意作为授权证明并允许授予访问令牌。

2. 演员

OAuth 流程中出现四个参与者:

  • 资源所有者拥有请求访问的数据。资源所有者可以是个人最终用户或公司。回到我们的代客泊车钥匙类比,您是豪华车的资源所有者。
  • 资源服务器是安全存储应用程序或服务请求访问的数据的 API 或服务器。资源服务器必须接受并验证来自请求应用程序的访问令牌,才能授予对数据的访问权限。在我们的比喻中,资源服务器是汽车的计算机,用于验证代客钥匙的有效性。
  • 客户端是请求访问资源服务器所保护的数据的应用程序或服务。客户端通过向资源服务器提供有效的访问令牌来获得对所请求资源的访问权限。再次使用我们的类比,客户端是请求移动汽车的代客泊车员。
  • 授权服务器负责处理令牌管理,因此大多数 OAuth 都发生在授权服务器。来自客户端的访问请求被定向到授权服务器。一旦资源所有者看到范围并表示同意,授权服务器就会向资源服务器发出新的访问令牌。

3. 客户端

客户端可以是机密的,也可以是公开的。机密客户端顾名思义就是保守秘密。它们在安全区域运行,最终用户无法访问。  

公共客户端是安全性较低的实体,例如浏览器、移动应用程序和物联网设备,而机密客户端则更安全,并且可以被授予更多对安全资源的访问权限。

4. Token

OAuth 流中有两种类型的令牌参与者——访问令牌和刷新令牌。

  • 访问令牌由授权服务器授予,用于访问资源服务器中的数据。它们通常允许客户端访问资源几分钟到几小时。
  • 刷新令牌仅授予具有安全身份验证协议的机密客户端,有效期为几天、几个月甚至几年 – 它们还可用于为其他客户端获取新的访问令牌。

当您终止刷新令牌时,您将获得一个新的、经过加密签名的访问令牌。

通常,这些令牌采用 JavaScript 对象表示法 (JSON) 格式,称为 JSON Web 令牌或 JWT(发音为“jots”)。JWT 允许数字签名(也称为声明),稍后可以使用秘密签名密钥进行验证。

令牌从授权服务器上的两个主要端点获取。第一个是授予用户同意和授权的“授权端点”。授权随后传递到“令牌端点”,在此处理授权并授予刷新令牌和访问令牌。

访问令牌是访问 API 的关键。但一旦过期,就需要使用刷新令牌再次前往令牌端点,重新执行所有操作。

5. 流程

流程是客户端访问请求的资源所需的一系列步骤和授权授予类型。 

OAuth 2.0 包括六种流程,用于不同类型的交互。

  • 隐式流程涉及向公共客户端授予短期访问令牌。
  • 授权码流程是最安全的流程,并使用授权码授予和访问令牌的组合。
  • 客户端凭证流旨在处理来自机密客户端的服务器到服务器的访问请求。
  • 资源所有者密码流程很少使用,并且在大多数情况下不推荐使用。
  • 断言流类似于客户端凭证流,并允许使用联合。
  • 设备流处理通过电视屏幕等智能设备发出的访问请求。

OAuth 2.0 的潜在缺点或为什么它不足以保护你的 API

尽管 OAuth 2.0 因保护私人数据而受到开发人员和最终用户的欢迎,但也有批评者。 

一些人猛烈抨击 1.0 版和 2.0 版之间的重大变化,这并非毫无道理。OAuth 2.0 的安全性明显低于其前身,而且更为复杂。 

OAuth2.0最大的诟病可能就是不直接支持客户端验证、签名、通道绑定。

批评者指责 OAuth 2.0 的创建者选择专注于提高网站和设备之间的互操作性,而不是提供额外的范围和安全性。

OAuth 建议使用第三方保护协议(例如传输层安全性(TLS))  来提供附加功能。

虽然 OAuth 2.0 在安全使用私人数据方面向前迈了一步,但它远不足以防止您的 API 受到在OWASP API 安全性前 10 名列表中排名第一的对象级授权 (BOLA) 漏洞的侵害。

公司依靠自动化 API 安全测试平台全面测试其 API,以跟上不断发展的安全标准。

文章来源:What Is OAuth 2.0 and How Does It Work?

#你可能也喜欢这些API文章!