我们正在计划两个服务之间的集成:A
和B
。
服务A
将成为OpenID提供者,服务B
依靠它来登录用户并创建新帐户。
服务A
还提供使用OAuth授权的REST API对其资源的访问,服务B
使用通过OpenID授权代码流获得的OAuth访问令牌。
但是,在某些情况下,A
要从B
获取数据。这些服务之间已经建立了协议,即A
可以访问通过OpenID Connect创建的用户范围内的B
中的任何数据。
如何设计服务B
API的授权? A
可以在HTTP请求中向B
提供什么?
我正在考虑使用经典的API Key
之类的东西,但是在此工作流程中看起来并不自然。
答案 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
的服务被其他客户端使用,那么事情就很简单了。