SSO JWT - Pasando grupos

Uso GitHub - discourse/discourse-jwt: Discourse Auth support for JSON Web Tokens (JWT) · GitHub para la autenticación con un servicio JWT personalizado.

Funciona para iniciar sesión en el usuario, pero pasar la clave groups no parece tener ningún efecto. He revisado el código de ManagedAuthenticator y no veo nada relacionado con los grupos.

¿Falta algo o mi comprensión es incorrecta?

¡Gracias!

No te estás perdiendo nada: el plugin JWT no admite la transmisión de grupos. Hacerlo posible requeriría trabajo de desarrollo en el plugin.

@david ¿Qué tan difícil crees que sea hacerlo para alguien que no ha escrito plugins? ¿Es tan simple como buscar por nombre los grupos que provienen del JWT en Discourse y asignar el resultado de la consulta (de los objetos de grupo) a user.groups? Tengo cierta familiaridad con el plugin (por simple que sea) y quizás pueda hacerlo.

Además, ¿debería siquiera molestarme en esto? Si tengo un JWT en mano, ¿puedo autenticarme mediante OpenID Connect?

Depende de cómo quieras que funcione… probablemente quieras poder crear grupos normales en Discourse también, sin que el JWT elimine miembros de ellos al azar. En nuestro sistema de SSO nativo de Discourse, resolvemos esto con dos parámetros: “add groups” y “remove groups”.

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

En el plugin JWT, probablemente añadirías esta lógica en la función after_authenticate del autenticador. Asegúrate de llamar a super y devolver su respuesta, para que todo lo existente siga funcionando correctamente. Un ejemplo de ese tipo de sobrescritura está aquí

¡Genial! Eso me da lo que quería; debería poder resolver el resto. ¡Gracias!

¿Avanzaste con esto? Me pregunto cómo puedo hacer un SSO usando solo JWT.

El plugin discourse-jwt funciona. Sin embargo, parece que está diseñado para funcionar solo con el algoritmo HS256, por alguna razón. Es bastante sencillo hacerlo funcionar con otros.

Puedes revisar el repositorio en el que experimenté: discourse-jwt/plugin.rb at master · arivanandan/discourse-jwt · GitHub