什么是 OAuth?

OAuth 或开放授权是一种开放标准,允许用户在不共享登录凭证的情况下,授予第三方应用程序访问其资源的权限。OAuth 使用临时访问令牌授权第三方应用程序代表用户进行访问,而不是让用户暴露密码。

例如,假设您正在使用 Mailchimp(一款流行的电子邮件营销工具)等第三方应用程序,并希望导入您的 Google 联系人来建立电子邮件列表。OAuth 使您能够安全地将 Google 账户连接到 Mailchimp,在不暴露密码的情况下授予对联系人有限的访问权限,而无需手动下载和上传每个联系人到 Mailchimp。

OAuth 与 OAuth 2.0:有什么区别?

OAuth 或 OAuth 1.0 要求每个授权请求都使用加密签名进行签名。这意味着第三方应用程序必须使用共享密钥对请求进行签名,授权服务器必须复制该密钥以验证请求。虽然加密签名确保请求未被篡改,但它们并不加密数据,因此在传输过程中数据仍然容易被拦截或窃取。

OAuth 2.0 用 HTTPS 加密取代了加密签名,提供安全的端到端数据传输,从而简化授权过程。OAuth 2.0 使用短期访问令牌和刷新令牌,通过最大限度地减少令牌暴露来提高安全性。它还通过支持多种不同的授权流(如网络应用、移动应用程序和服务器到服务器通信)来提供更大的灵活性。

功能OAuth 1.0 OAuth 2.0
安全性 使用加密签名,每个请求使用共享的密钥。防止篡改,但不防拦截。使用 HTTPS/TLS 加密,确保端到端数据传输的安全
令牌系统 单一令牌类型,没有标准到期时间使用短期访问令牌和刷新令牌,以增强安全性
请求验证 应用程序和服务器都必须生成匹配的签名以验证请求TLS 负责对请求进行加密和验证。
授权流程 适用于所有用例的单一流程支持不同应用程序类型(Web、移动、服务器到服务器)的多种流程
实施复杂性 由于加密签名要求而复杂由于依赖 HTTPS,实现更简单
现代用法 在现代应用程序中不常见现代应用的行业标准
安全权衡 附加签名安全层,但更复杂依赖于 TLS 安全,但更容易正确实施
推荐用于需要签名验证的旧系统 大多数现代应用程序和 API

虽然 OAuth 和 OAuth 2.0 都是实用的选择,但建议使用 OAuth 2.0,因为它更容易实施,而且在现代应用程序中更常用。

OAuth 的工作原理

以下是关于 OAuth 2.0 如何通过授权码授予流程工作的分步指南:

  1. 用户启动授权: 用户希望授予第三方应用程序(称为客户端)访问其在服务器上托管的资源的权限。这通常从用户在客户端应用程序中点击诸如“使用 Google 登录”或“连接 GitHub”之类的按钮开始。
  2. 客户端请求授权: 客户端会将用户重定向到授权服务器的授权端点。该请求包括以下参数:client_idredirect_uriresponse_type=codescopestate(用于 CSRF 保护)。随后,系统可能会提示用户进行身份验证(如果尚未登录),并让其批准或拒绝所请求的访问权限。
  3. 授权已授予: 如果用户批准请求,授权服务器会将用户的浏览器重定向回客户端的redirect_uri。URL 中包含授权码和state参数,客户端应验证以确保请求未被篡改或拦截。
  4. 客户端请求访问令牌: 客户端向令牌端点发送请求,用授权码交换获取令牌。此请求必须包含:authorization_codeclient_idclient_secret(如果适用)、redirect_uri(必须与原始请求匹配)和grant_type=authorization_code
  5. 客户端接收访问令牌和刷新令牌: 如果请求通过验证,授权服务器会签发访问令牌用于验证 API 请求,并签发刷新令牌以在当前令牌过期时获取新的访问令牌。客户端会将这些令牌安全地存储,并在 API 请求中使用访问令牌。
  6. 客户端使用刷新令牌: 当访问令牌过期时,客户端可以向令牌端点发送刷新令牌请求,以获取新的访问令牌。要获得新的访问令牌,客户端必须使用以下条件向令牌端点发送新请求:client_idclient_secretrefresh_tokengrant_type=refresh_token

OAuth 的优势

使用 OAuth 提供了几个优势,例如降低凭证被盗的风险、改善用户体验以及实现单点登录(SSO)。

降低凭证被盗或滥用的风险

OAuth 消除了用户直接与第三方应用程序共享其凭据的必要性。相反,它依靠授权服务器来管理访问,大大降低了凭证暴露的风险,尤其是在数据泄露的情况下。OAuth 2.0 使用短期访问令牌,在指定时间内授予对资源的有限访问权限。用户可随时撤销这些令牌,以确保访问权仍然是临时性的,并在用户的控制之下。

改善用户体验

OAuth 通过允许用户使用现有账户访问多个账户和资源,消除了为每项服务创建单独用户名和密码的必要性,从而简化了用户体验。这加快了访问速度,并减少了管理多套登录凭证的麻烦。

启用单点登录

OAuth 通过允许用户通过受信任的服务提供商登录一次,然后使用多个应用程序,无需重新输入凭据,从而实现SSO。只要用户仍然登录到提供商,就可以无缝使用连接到同一账户的其他应用程序。例如,登录 Google 的用户也可以访问依赖 Google 进行身份验证的应用程序。

OAuth 的缺点

尽管 OAuth 有其优势,但它也存在一些安全风险,包括如果不安全存储或传输,令牌可能会被泄露,而且用户可能仍然容易受到网络钓鱼攻击。

如果不安全存储,令牌可能会被泄露

访问令牌和刷新令牌是网络犯罪分子的宝贵目标,因为它们提供了直接访问用户数据和资源的途径。如果令牌存储不当,威胁行为者可能会入侵它们,可能导致未经授权的访问和账户被盗用。

如果传输不安全,令牌可能会被盗用

如果通过不安全的连接发送令牌,例如使用 HTTP 而不是 HTTPS,可能会被中间人(MITM)攻击拦截。令牌一旦被泄露,就可能被用来未经授权地访问用户的资源。

易受网络钓鱼攻击

OAuth 依靠将用户重定向到授权服务器来授予权限,但这一过程可能被网络钓鱼攻击所利用。在网络钓鱼攻击中,攻击者会诱使用户在假冒合法授权服务器的虚假登录页面上输入凭证。如果用户没有注意到其中的区别,他们可能会在不知情的情况下输入凭据,从而让攻击者访问账户和敏感数据。

立即购买