SSO JWT - 传递组信息

我使用 GitHub - discourse/discourse-jwt: Discourse Auth support for JSON Web Tokens (JWT) · GitHub 进行自定义 JWT 服务的身份验证。

它可以正常用于用户登录,但传递 groups 键似乎没有任何效果。我查看了 ManagedAuthenticator 的代码,也没有发现与 groups 相关的部分。

是缺少了什么,还是我对它的理解有误?

谢谢!

您没有遗漏任何内容——JWT 插件不支持传递群组。要实现这一功能,需要对插件进行一些开发工作。

@david 对于没有写过插件的人来说,你觉得这有多难?是否只需根据 JWT 中的组名从 Discourse 获取,然后将查询结果(组对象)赋值给 user.groups?我对这个插件(虽然很简单)有一定了解,或许能完成这个任务。

另外,我是否应该尝试这样做?如果我已经有了 JWT,是否可以通过 OpenID Connect 进行身份验证?

这取决于你希望它如何运作……你可能也希望在 Discourse 中创建普通群组,而不要让 JWT 随机从中移除成员。在我们原生的 Discourse SSO 系统中,我们通过两个参数来解决这个问题:“添加群组”和“移除群组”。

https://github.com/discourse/discourse/blob/master/app/models/discourse_single_sign_on.rb#L159-L179

在 JWT 插件中,你很可能需要在 authenticator 的 after_authenticate 函数中添加此逻辑。请确保调用 super 并返回其响应,以便所有现有功能仍能正常工作。一个类似的覆盖示例见此处

太好了!这正是我想要的;剩下的我应该能搞定。谢谢!

你推进这件事了吗?我想知道如何仅使用 JWT 实现单点登录(SSO)?

discourse-jwt 插件可以正常工作。不过,出于某种原因,它似乎仅设计为与 HS256 算法配合使用。要让它支持其他算法其实很简单。

你可以查看我修改过的仓库:discourse-jwt/plugin.rb at master · arivanandan/discourse-jwt · GitHub