認証には GitHub - discourse/discourse-jwt: Discourse Auth support for JSON Web Tokens (JWT) · GitHub を使用し、カスタム JWT サービスと連携させています。
ユーザーのログインは機能するのですが、groups キーを渡しても何も機能していないようです。ManagedAuthenticator のコードを確認しましたが、groups に関連する記述も見つかりませんでした。
何か不足しているのでしょうか、それとも私の理解が間違っているのでしょうか?
よろしくお願いいたします。
david
(David Taylor)
2
何か見落としているわけではありません。JWT プラグインはグループの受け渡しをサポートしていません。これを可能にするには、プラグイン側でいくつかの開発作業が必要です。
@david プラグインの作成経験がない人がこれを実装するのはどれくらい難しいと思いますか?Discourse から JWT に含まれるグループを名前で取得し、そのクエリ結果(グループオブジェクト)を user.groups に割り当てるだけで済むのでしょうか?このプラグイン(シンプルではあるものの)にはある程度精通しており、これを実装できるかもしれません。
また、そもそもこれに取り組むべきでしょうか?JWT を保持している場合、OpenID Connect を介して認証することは可能でしょうか?
david
(David Taylor)
4
それは、どのように動作させたいかによります。おそらく、JWT がメンバーを無作為に削除することなく、Discourse で通常のグループを作成できるようにしたいでしょう。Discourse のネイティブ SSO システムでは、「グループの追加」と「グループの削除」という 2 つのパラメータでこの問題を解決しています。
https://github.com/discourse/discourse/blob/master/app/models/discourse_single_sign_on.rb#L159-L179
JWT プラグインでは、おそらく authenticator の after_authenticate 関数にこのロジックを追加することになります。既存の機能が正しく動作するように、super を呼び出し、そのレスポンスを返すことを忘れないでください。そのようなオーバーライドの例はこちらです。
素晴らしい!それで欲しいものが手に入りました。残りは自分で解決できるはずです。ありがとう!
wlandgraf
(Wagner Landgraf)
6
これを進めましたか?JWT のみを使って SSO を実現するにはどうすればよいでしょうか?
discourse-jwt プラグインは動作します。ただし、何らかの理由で HS256 アルゴリズムのみに対応するように設計されているようです。他のアルゴリズムに対応させるのはそれほど難しくありません。
私が実験したリポジトリはこちらをご覧ください:discourse-jwt/plugin.rb at master · arivanandan/discourse-jwt · GitHub