OpenID Connect 如何处理服务链?
Posted
技术标签:
【中文标题】OpenID Connect 如何处理服务链?【英文标题】:How does OpenID Connect deal with service chains? 【发布时间】: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
标头只允许一个令牌。但我需要两个空间:
无论哪种方式,服务 2 都不会高兴。
问题
OpenID Connect 是否可以合并两个令牌?还是其他方式让服务调用链发挥作用?
注意:我目前都通过了。一个在Authorization: Bearer
标头中,一个在自定义标头中。但由于这不是 OpenID Connect 协议的一部分,因此在使用 3rd 方工具(如 OpenAPI(又名 Swagger))时会出现问题。
【问题讨论】:
【参考方案1】:您可以查看委托令牌模式来为 Service1 与 Service 通信颁发新令牌。
见:
https://auth0.com/docs/tokens/delegation-tokens https://www.scottbrady91.com/OAuth/Delegation-Patterns-for-OAuth-20【讨论】:
以上是关于OpenID Connect 如何处理服务链?的主要内容,如果未能解决你的问题,请参考以下文章
OpenID Connect 最终会取代 SAML 成为 SSO 的主导协议吗?
Mysql连接报错:1130-host ... is not allowed to connect to this MySql server如何处理