Oauth2:具有多个 OpenId Provider 的 Data Provider

Oauth2 : a Data Provider whith multiple OpenId Provider

想象一个由 OAuth2 保护的 DataProvider。此 DataProvider 接受来自多个 OpenId Provider 的 OAuth2 令牌。 当 RP(客户端)使用访问令牌调用此 DataProvider 时,DataProvider 如何知道要联系的 DataProvider 以检查访问令牌?

创建一个可以接受来自多个颁发者的 OAuth 令牌的后端是可行的。为此,您需要一个层来过滤请求并验证访问令牌。如果您来自 JAVA EE 背景,请将其视为保护所有 OAuth 保护端点(例如:- Servlet)的过滤器。

可以通过多种方式选择授权服务器(颁发 OAuth 令牌的一方)。

首先,请求发送者(可能是客户端)可以将带有 OAuth 令牌的提示传递给数据提供者。在事先与客户和数据提供者(服务器端)达成协议的情况下,您可以为此使用专用的 header。例如,auth-source:azure-ad 表示 OAuth 令牌是由 Azure 广告授权服务器颁发的。请注意,在这种方法中,您还需要就支持的 header 值达成一致。

其次是通过颁发者声明(iss 声明)来检测授权服务器。为此,您的访问令牌必须采用 JWT 格式。根据目前的情况,许多服务以 JWT 格式发布访问令牌(例如:- Azure AD does this). JWT being a self-contained token should contain iss claim which denote the JWT issuer,授权服务器。

OAuth 2.0 专为资源服务器(RS,您称为 DataProvider)和授权服务器(AS,您称为 OpenID 提供者)位于同一安全域中的世界而设计。

使用提示从多个 AS 中查找 AS 是非标准行为。假设所有 AS 将使用相同的访问令牌类型、格式和声明,例如范围也是一个延伸。 UMA 2.0,Auth 2.0 的配置文件实际上可以在这里提供帮助https://docs.kantarainitiative.org/uma/ed/uma-core-2.0-01.html,但没有被广泛采用。

更好的体系结构方法是在您的域中设置一个 AS 服务器,该服务器发布一个从远程 AS 锁定的访问令牌。

或者,您可以实施 OAuth 2.0 的 OpenID Connect 配置文件,这是 OAuth 2.0 之上的身份层,它允许进行多提供商设置,因为其中的 id_token 说明了发行者是谁iss 声明,对提供商的引用以及与提供商域中所谓的 UserInfo 端点的交互已经标准化。