SSO JWT - Transfert des groupes

J’utilise GitHub - discourse/discourse-jwt: Discourse Auth support for JSON Web Tokens (JWT) · GitHub pour l’authentification avec un service JWT personnalisé.

Cela fonctionne pour connecter l’utilisateur, mais passer la clé groups ne semble avoir aucun effet. J’ai parcouru le code de ManagedAuthenticator et je n’ai rien trouvé concernant les groupes non plus.

Est-ce qu’il manque quelque chose ou est-ce que ma compréhension est incorrecte ?

Merci !

Vous ne ratez rien : le plugin JWT ne prend pas en charge le passage des groupes. Le rendre possible nécessiterait un certain travail de développement sur le plugin.

@david À quel point penses-tu que ce soit difficile à réaliser pour quelqu’un qui n’a jamais écrit de plugins ? Est-ce aussi simple que de récupérer par nom, depuis Discourse, les groupes issus du JWT, puis d’assigner le résultat de la requête (les objets groupe) à user.groups ? Je connais un peu le plugin (aussi simple soit-il) et je pourrais peut-être le faire.

Par ailleurs, devrais-je même m’en soucier ? Si je possède un JWT en main, puis-je m’authentifier via OpenID Connect ?

Cela dépend de la façon dont vous souhaitez que cela fonctionne… vous voudrez probablement pouvoir créer des groupes normaux dans Discourse également, sans que le JWT supprime aléatoirement des membres de ces groupes. Dans notre système SSO natif de Discourse, nous résolvons cela avec deux paramètres : « add groups » et « remove groups ».

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

Dans le plugin JWT, vous ajouteriez probablement cette logique dans la fonction after_authenticate de l’authentifieur. Assurez-vous d’appeler super et de renvoyer sa réponse, afin que tout le fonctionnement existant continue de fonctionner correctement. Un exemple de ce type de surcharge se trouve ici

Super ! Cela me donne ce que je voulais ; je devrais pouvoir me débrouiller pour le reste. Merci !

Avez-vous avancé sur ce point ? Je me demande comment je peux mettre en place une SSO en utilisant uniquement JWT.

Le plugin discourse-jwt fonctionne. Cependant, il semble qu’il soit conçu pour ne fonctionner qu’avec l’algorithme HS256, pour une raison quelconque. Il est assez simple de le faire fonctionner avec d’autres algorithmes.

Vous pouvez consulter le dépôt sur lequel j’ai fait des essais : discourse-jwt/plugin.rb at master · arivanandan/discourse-jwt · GitHub