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

时间:2019-01-16 19:16:38

标签: rest api oauth openid-connect api-design

我们正在计划两个服务之间的集成:AB

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

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

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

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

我正在考虑使用经典的API Key之类的东西,但是在此工作流程中看起来并不自然。

1 个答案:

答案 0 :(得分:1)

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

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

一种选择是启用来自B的服务,这些服务受OAuth 2.0访问令牌的保护。类似于A中已有的内容。为了使用这些服务,您将有一些绑定到A的服务/客户端实现。他们将要做的是从A本身获取令牌,以与B通信。在api之后,由于没有最终用户参与(场景涉及服务到服务的交互)。

此建议的解决方案与API密钥用法相似,但具有OAuth 2.0协议的附加优点,这使您可以生成寿命有限的Access令牌,并根据需要刷新它们。另外,如果您希望B的服务被其他客户端使用,那么事情就很简单了。