OIDC - 识别资源服务器

OIDC - Identifying the Resource Server

如果我正在实现可供多个客户端使用的 OIDC 服务器,并且涉及多个资源服务器。

在授权端点中,我们只获得 clientId。根据 RFC,我们不会在授权端点中获得有关资源服务器的任何信息。我如何知道我要为哪个资源服务器返回 ID 令牌和访问令牌?

我是否应该有一个唯一的 ClientId 并且总是映射到一个唯一的资源服务器?

因此,如果客户端应用程序 A 想要将 OIDC 与资源服务器 X 一起使用 => 那么客户端 ID 将为 ID1

如果客户端应用程序 A 想要将 OIDC 与资源服务器 Y 一起使用 => 那么客户端 ID 将为 ID2

所以根据Client-ID我们就知道资源服务器是什么了。

您可以那样做,但是在授权端点上需要的范围参数中定义对资源的访问更合适。 https://openid.net/specs/openid-connect-core-1_0.html#AuthRequest

因此,客户端应用程序 A 可以有一个 client_id 并在需要访问服务器 X 时向身份验证端点发送类似“scope=ServerX”的内容,在需要访问服务器时发送“scope=ServerY” Y,或“scope=ServerX ServerY”,当它需要两者时。定义这些自定义范围并决定是否授予请求取决于您的 OIDC 实施。 (“ServerX”和“ServerY”只是此处的示例。它们将用作作用域,但您会看到作用域通常具有较长的名称空间以使其普遍唯一。)

您可以在 Google 的 OAuth 游乐场 (https://developers.google.com/oauthplayground/) 上看到这种方法。 Google 有一个 OAuth 服务来控制对定义为范围的数十种资源的访问。请注意,在访问授权端点之前,您必须先 select 所需的资源。