任何同时使用 OpenID Connect 和 OAuth 2.0 的场景?

信息安全 验证 oauth 授权 打开ID 开放式连接
2021-08-14 03:23:31

由于 OpenID Connect 建立在 OAuth 2.0 之上,因此我假设 OAuth 2.0 的所有功能都可以通过 OpenID Connect 实现。

具体来说,假设我的网站存储了一些属于用户的信息,并实现了 OpenID Connect 来对用户进行身份验证。当用户通过另一个网站进行身份验证时,该网站可以使用相同的 OpenID Connect 流程从用户那里获得授权,以便访问该用户在我的网站上的信息。

这种说法正确吗?是否存在我需要独立于 OpenID Connect 实施 OAuth 2.0 的情况?

1个回答

简短的回答是它是未定义的。如果您想要一个支持两者的库,请确保它明确声明它同时支持 OAuth 2 和 OIDC。

如果要绘制维恩图,OAuth 2 和 OIDC 相互交叉,但 OAuth 2 还定义了 OIDC 未扩展的一些流,并且 OIDC 添加了 OAuth 2 中没有的流。

OAuth 2 流程

  • 授权码授予
  • 隐式授权
  • 资源所有者密码凭证授予
  • 客户凭证授予

OIDC 流程

  • 授权码授予
  • 隐式授权
  • 杂交种

OIDC 规范明确扩展了 OAuth 2 的授权代码和隐式流程,但对其他规范只字未提。因此,给定的 OIDC 实现可能完全或部分支持或不支持剩余的 OAuth 2 流。我的部分意思是,它仅根据 OAuth 2 返回访问令牌,而不是 ID 令牌。

那么为什么 OIDC 不明确涵盖所有 OAuth 2 流程呢?这是我的想法:

  • 资源所有者密码凭证授予。此流程破坏了 OAuth 2 的授权代码授予引入的安全功能。从安全的角度来看,远离这个流程。
  • 客户凭证授予。这种情况的一个例子是服务到服务的通信,这可以通过 PKI 解决——不需要 OIDC 引入的 ID 令牌。