OpenID Connect / oAuth:如何允许 OpenId Provider 在依赖方(客户端)端访问用户数据

OpenID Connect / oAuth: How to allow OpenId Provider to access user's data at the Relying Party (Client) side

我们计划在两个服务之间进行集成:AB

服务 A 将成为 OpenID 提供商,服务 B 依赖它来登录用户并创建新帐户。

服务 A 还使用 OAuth 授权通过 REST API 提供对其资源的访问,服务 B 使用通过 OpenID 授权代码流获得的 OAuth 访问令牌。

但是,在某些情况下,A 想要从 B 获取数据。这些服务之间已达成协议,A 可以在通过 OpenID Connect 创建的用户范围内访问来自 B 的任何数据。

如何设计服务 B API 的授权? A 可以在 HTTP 请求中向 B 提供什么?

我正在考虑类似经典的东西 API Key,但在这个工作流程中它看起来不自然。

从 OAuth 和 OpenID Connect 协议的角度来看,您提到的场景没有直接的解决方案。

但是根据您的解释,您在 service A 中拥有 OAuth 2.0 访问令牌保护服务。此外,A 充当身份提供者(具有 OpenID Connect 支持)。如果是这种情况,我相信您可以控制令牌发行过程和验证。

一个选项是启用来自 B 的服务,这些服务受到 OAuth 2.0 访问令牌的保护。这类似于您在 A 中已有的内容。要使用这些服务,您将有一些 service/client 实现绑定到 A。他们会做的是从 A 本身获取令牌以与 B 通信。这可以遵循 client credential grant from OAuth 2.0,因为没有最终用户参与(场景涉及服务到服务交互)。

此建议的解决方案类似于 API 密钥用法,但具有 OAuth 2.0 的额外优势 protocol.This 允许您生成具有有限生命周期的访问令牌,并允许在需要时刷新它们。此外,如果您希望 B 的服务被另一个客户端使用,那么事情就很简单了。