《系统设计》课程学习笔记—OAuth 2.0 和 OpenID Connect (OIDC)

336 阅读3分钟

OAuth 2.0

OAuth 2.0 代表开放授权(Open Authorization),是一个提供可信任用户对资源的访问许可而不共享用户凭证的标准。OAuth 2.0是一个授权协议,而不是认证协议,它主要被设计为一种授权访问一组资源的方法,例如远程 API 或用户数据。

概念

OAuth 2.0协议定义了以下实体:

  • 资源所有者(Resource Owner):拥有受保护资源并可以授予访问权限的用户或系统。
  • 客户端(Client):客户端是需要访问受保护资源的系统。
  • 授权服务器(Authorization Server):该服务器接收来自客户端的访问令牌请求,并在资源所有者成功认证和同意后发布。
  • 资源服务器(Resource Server):保护用户资源并从客户端接收访问请求的服务器。它接受并验证来自客户端的访问令牌,并返回适当的资源。
  • 作用域(Scopes):它们用于指定授予资源访问权限的确切原因。可接受的范围值以及它们与哪些资源相关,它取决于资源服务器。
  • 访问令牌(Access Toke):代表最终用户访问资源的授权的一段数据。

OAuth 2.0是如何工作的?

让我们了解OAuth 2.0的工作原理:

oauth2.webp

  1. 客户端从授权服务器请求授权,并提供客户端id和密钥作为标识。它还提供了作用域和端点URI,以发送访问令牌或授权代码。

  2. 授权服务器对客户端进行身份验证,并验证请求作用域是否被允许。

  3. 资源所有者与授权服务器交互以授予访问权限。

  4. 授权服务器使用授权代码或访问令牌重定向回客户端,具体取决于授权类型。还可以返回刷新令牌。

  5. 使用访问令牌,客户端可以从资源服务器请求访问资源。

缺点

以下是OAuth 2.0最常见的缺点:

  • 它缺乏内置的安全功能。
  • 没有标准实现。
  • 没有通用的作用域集。

OpenID Connect

OAuth 2.0仅用于授权,用于授权从一个应用程序到另一个应用软件的数据和功能访问。OpenID Connect(OIDC)是一个位于 OAuth 2.0 之上的薄层,它添加了有关登录者的登录和配置文件信息。

当授权服务器支持 OIDC 时,它有时被称为身份提供者(IdP),因为它向客户端提供有关资源所有者的信息。OpenID Connect相对较新,与OAuth相比,最佳实践的采用率和行业实现率较低。

概念

OpenID Connect(OIDC)协议定义了以下实体:

  • 依赖方(Relying Party):当前应用程序。
  • OpenID 提供者(OpenID Provider):这本质上是一种向依赖方提供一次性代码的中间服务。
  • 令牌端点(Token Endpoint):接受一次性代码(One-Time Code,OTC)并提供有效期为一小时的访问代码的 Web 服务器。OIDC 和 OAuth 2.0之间的主要区别在于,令牌是使用JSON Web Token(JWT)提供的。
  • UserInfo端点(UserInfo Endpoint):依赖方与此端点通信,提供安全令牌并接收有关最终用户的信息。

OAuth 2.0 和 OIDC都易于实现,并且都基于JSON,大多数Web和移动应用程序都支持JSON。然而,OpenID Connect(OIDC)规范比基本 OAuth 规范更严格。