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的工作原理:
-
客户端从授权服务器请求授权,并提供客户端id和密钥作为标识。它还提供了作用域和端点URI,以发送访问令牌或授权代码。
-
授权服务器对客户端进行身份验证,并验证请求作用域是否被允许。
-
资源所有者与授权服务器交互以授予访问权限。
-
授权服务器使用授权代码或访问令牌重定向回客户端,具体取决于授权类型。还可以返回刷新令牌。
-
使用访问令牌,客户端可以从资源服务器请求访问资源。
缺点
以下是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 规范更严格。