# SSO JWT - 传递组信息

**URL:** https://meta.discourse.org/t/sso-jwt-passing-groups/141255
**Category:** Support
**Created:** [2020年二月11日 06:12 UTC](https://meta.discourse.org/t/sso-jwt-passing-groups/141255 "2020-02-11T06:12:20Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![arivanandan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arivanandan/32/160108_2.png) [@arivanandan](https://meta.discourse.org/u/arivanandan)
#### Post date: [2020年二月11日 06:12 UTC](https://meta.discourse.org/t/sso-jwt-passing-groups/141255/1 "2020-02-11T06:12:20Z")

</div>

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

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

是缺少了什么，还是我对它的理解有误？

谢谢！

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [2020年二月11日 09:14 UTC](https://meta.discourse.org/t/sso-jwt-passing-groups/141255/2 "2020-02-11T09:14:41Z")

</div>

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

---

<div class="post-metadata">

### Author: ![arivanandan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arivanandan/32/160108_2.png) [@arivanandan](https://meta.discourse.org/u/arivanandan)
#### Post date: [2020年二月14日 13:51 UTC](https://meta.discourse.org/t/sso-jwt-passing-groups/141255/3 "2020-02-14T13:51:39Z")

</div>

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

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

---

<div class="post-metadata">

### Author: ![david](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/david/32/157490_2.png) [@david](https://meta.discourse.org/u/david)
#### Post date: [2020年二月14日 13:57 UTC](https://meta.discourse.org/t/sso-jwt-passing-groups/141255/4 "2020-02-14T13:57:17Z")

</div>

这取决于你希望它如何运作……你可能也希望在 Discourse 中创建普通群组，而不要让 JWT 随机从中移除成员。在我们原生的 [Discourse SSO](https://meta.discourse.org/t/13045?silent=true) 系统中，我们通过两个参数来解决这个问题：“添加群组”和“移除群组”。

[https://github.com/discourse/discourse/blob/master/app/models/discourse\_single\_sign\_on.rb#L159-L179](https://github.com/discourse/discourse/blob/master/app/models/discourse_single_sign_on.rb#L159-L179)

在 JWT 插件中，你很可能需要在 authenticator 的 `after_authenticate` 函数中添加此逻辑。请确保调用 `super` 并返回其响应，以便所有现有功能仍能正常工作。一个类似的覆盖示例见[此处](https://github.com/discourse/discourse/blob/master/lib/auth/twitter_authenticator.rb#L12-L16)。

---

<div class="post-metadata">

### Author: ![arivanandan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arivanandan/32/160108_2.png) [@arivanandan](https://meta.discourse.org/u/arivanandan)
#### Post date: [2020年二月14日 14:01 UTC](https://meta.discourse.org/t/sso-jwt-passing-groups/141255/5 "2020-02-14T14:01:13Z")

</div>

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

---

<div class="post-metadata">

### Author: ![wlandgraf](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/wlandgraf/32/154660_2.png) [@wlandgraf](https://meta.discourse.org/u/wlandgraf)
#### Post date: [2020年二月26日 16:41 UTC](https://meta.discourse.org/t/sso-jwt-passing-groups/141255/6 "2020-02-26T16:41:42Z")

</div>

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

---

<div class="post-metadata">

### Author: ![arivanandan](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/arivanandan/32/160108_2.png) [@arivanandan](https://meta.discourse.org/u/arivanandan)
#### Post date: [2020年二月28日 16:30 UTC](https://meta.discourse.org/t/sso-jwt-passing-groups/141255/7 "2020-02-28T16:30:26Z")

</div>

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

你可以查看我修改过的仓库：[discourse-jwt/plugin.rb at master · arivanandan/discourse-jwt · GitHub](https://github.com/arivanandan/discourse-jwt/blob/master/plugin.rb)

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [2020年三月29日 16:30 UTC](https://meta.discourse.org/t/sso-jwt-passing-groups/141255/8 "2020-03-29T16:30:29Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
