OAuth

oauth2026-10-15 19:12:28

OAuth 是一组用于委托访问的开放授权规范:应用获得许可后,可以访问服务中的指定资源,而不必取得用户的账户密码。相关说明见 OAuth 官方网站。

例如,用户允许一个打印应用读取相册中的照片,可以只授予照片读取权限,而无需将相册账户密码交给打印应用。

OAuth 1.0 与 OAuth 2.0

OAuth 1.0 使用请求签名等机制完成授权访问。OAuth 2.0 重新设计了授权流程,是与 OAuth 1.0 不兼容的授权框架;二者不是同一协议的小版本差异。规范分别见 RFC 5849 和 RFC 6749。

参与角色

OAuth 2.0 区分四个角色:

  • 资源所有者:有权批准访问资源的主体,通常是用户。
  • 客户端:申请访问资源的应用,可以运行在浏览器、电脑、手机或服务器上。
  • 授权服务器:处理授权请求并签发访问令牌。
  • 资源服务器:提供受保护资源,并校验访问令牌及对应权限。

授权服务器和资源服务器可以属于同一个系统。

基本流程

以用户批准应用访问资源的授权码流程为例:

  1. 应用将用户引导至授权服务器,说明申请的权限。
  2. 用户完成身份验证并决定是否批准。
  3. 授权服务器将短期、一次性的授权码返回应用。
  4. 应用用授权码换取访问令牌。
  5. 应用携带访问令牌请求资源,资源服务器检查令牌和权限后决定是否允许。

授权码是临时兑换凭据,访问令牌才是访问资源时使用的凭证。其他授权方式可以采用不同流程,并非所有 OAuth 场景都需要用户在网页上批准。授权码流程的安全要求可参阅 OAuth 2.0 安全最佳实践(RFC 9700)。

OAuth 与令牌机制

OAuth 不要求必须同时签发访问令牌和刷新令牌。 访问令牌用于访问受保护资源;刷新令牌是可选凭证,供应用在允许的情况下取得新的访问令牌,是否签发由授权服务器决定。

访问令牌的格式、有效期、存储位置,以及是否采用刷新令牌轮换,属于具体实现和安全策略,不能将某一种“双令牌”设计视为 OAuth 的定义。反过来,一个系统使用访问令牌和刷新令牌,也不代表它一定实现了 OAuth。

OAuth 处理的是访问授权,不等同于用户登录或身份认证。需要标准化用户身份认证时,可以采用建立在 OAuth 2.0 之上的 OpenID Connect。

本页目录