【问题标题】:How does OpenID Connect deal with service chains?OpenID Connect 如何处理服务链?
【发布时间】:2021-01-09 02:54:04
【问题描述】:

背景

假设我有一个创建货件的应用程序。用户坐在该应用程序前面并加载页面。然后将它们重定向到 IDP 以登录。我使用的流程是授权码流程。这涉及到客户端 ID 和客户端密码。 IDP 可以将这些值与用户凭据一起获取并进行登录。

登录后,应用程序会收到一个id_token,让应用程序知道用户是谁(身份验证)。

然后应用程序需要调用一个服务(我们可以称之为服务 1)。应用程序可以将id_token 作为 JWT 不记名令牌传递给服务 1。

服务 1 获取 JWT 并可以使用其上的签名(使用 IDP 的公钥)来验证 JWT 实际上来自它信任的 IDP。

问题

这一切都很好,而且效果很好。但是现在 Service 1 需要调用 Service 2 来完成 Shipment Application 的请求。

这就是让我感到困惑的地方。服务 1 有自己的客户端 ID 和客户端密钥。它可以获得一个“客户端凭据”令牌。但是服务 2 需要知道发出请求的用户,并且客户端凭据令牌中没有任何用户信息。

Authorization: Bearer 标头只允许一个令牌。但我需要两个空间:

  • 如果我只传递用户的 JWT,我的 JWT 看起来就像是直接从 Shipment Application 调用到服务 2。(可能甚至不应该直接从 Shipment Application 调用 Service 2。)
  • 但如果我只传递服务 1 的客户端凭据令牌,那么服务 2 将不会获取用户的信息。

无论哪种方式,服务 2 都不会高兴。

问题

OpenID Connect 是否可以合并两个令牌?还是其他方式让服务调用链发挥作用?

注意:我目前都通过了。一个在Authorization: Bearer 标头中,一个在自定义标头中。但由于这不是 OpenID Connect 协议的一部分,因此在使用 3rd 方工具(如 OpenAPI(又名 Swagger))时会出现问题。

【问题讨论】:

    标签: security jwt openid-connect


    【解决方案1】:

    您可以查看委托令牌模式来为 Service1 与 Service 通信颁发新令牌。

    见:

    【讨论】:

      猜你喜欢
      • 2015-01-09
      • 2017-04-18
      • 2021-11-13
      • 1970-01-01
      • 2016-12-18
      • 2016-11-19
      • 2015-04-29
      • 2020-04-22
      • 2018-08-07
      相关资源
      最近更新 更多