OpenID Connect 插件重构

我认为您所描述的是 OpenID Connect 的"隐式流程",它不需要服务器到服务器的通信,因此不需要共享密钥。相反,所有信息都通过 HTTP 重定向传输,并且 ID 令牌使用发现文档中的公钥进行加密验证。

这很好,我认为这是一个有效的特性请求。但它与我们当前的插件非常不同,后者使用"授权码流程"。此流程使用带有共享密钥的服务器到服务器通信,因此不需要对 id_token 进行加密验证。这在某些方面更简单,但在其他方面更复杂。

重要的是:我们不能仅仅更改插件中的默认实现。使用授权码流程的站点需要继续使用该流程。据我所知,许多身份提供商甚至不支持隐式流程。

因此,我认为这里有两个前进的方向:

  1. 我们在 OIDC 插件中添加对“隐式流程”的支持,但将其设置为可选。我认为我们不太可能接受一个将 openid-connect gem 作为 Discourse 核心依赖项引入的 PR,因此它需要实现在我们当前的策略中。

    discourse-lti(学习工具集成)插件可能是一个有用的灵感来源,因为 LTI 协议基于 OIDC 隐式流程。id_token 解码逻辑位于此处

或者

  1. 您将隐式流程构建为一个全新的插件。在这种情况下,您可以自由地在实现方面做任何您想做的事情(但您也必须自己维护它)。