SSO JWT - Passaggio dei gruppi

Utilizzo GitHub - discourse/discourse-jwt: Discourse Auth support for JSON Web Tokens (JWT) · GitHub per l’autenticazione con un servizio JWT personalizzato.

Funziona per il login dell’utente, ma passare la chiave groups non sembra avere alcun effetto. Ho esaminato il codice di ManagedAuthenticator e non ho trovato nulla relativo ai gruppi.

Manca qualcosa o la mia comprensione è errata?

Grazie!

Non stai perdendo nulla: il plugin JWT non supporta il passaggio dei gruppi. Renderlo possibile richiederebbe un certo lavoro di sviluppo sul plugin.

@david Quanto pensi sia difficile farlo per qualcuno che non ha mai scritto plugin? È semplice come recuperare per nome i gruppi provenienti dal JWT da Discourse e assegnare il risultato della query (degli oggetti gruppo) a user.groups? Ho una certa familiarità con il plugin (per quanto semplice) e potrei essere in grado di farlo.

Inoltre, ne vale la pena? Se ho un JWT a disposizione, posso autenticarmi tramite OpenID Connect?

Dipende da come vuoi che funzioni… probabilmente vorrai anche poter creare gruppi normali in Discourse, senza che il JWT rimuova casualmente i membri da essi. Nel nostro sistema SSO nativo di Discourse, risolviamo questo problema con due parametri: “add groups” e “remove groups”.

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

Nel plugin JWT, dovresti probabilmente aggiungere questa logica nella funzione after_authenticate dell’autenticatore. Assicurati di chiamare super e di restituire la sua risposta, in modo che tutto il resto continui a funzionare correttamente. Un esempio di questo tipo di override si trova qui

Ottimo! Mi hai dato quello che volevo; dovrei essere in grado di capire il resto. Grazie!

Hai proceduto con questo? Mi chiedo come sia possibile implementare un SSO utilizzando solo JWT.

Il plugin discourse-jwt funziona. Tuttavia, sembra che sia progettato per funzionare solo con l’algoritmo HS256, per qualche motivo. È abbastanza semplice adattarlo per farlo funzionare con altri.

Puoi consultare il repository su cui ho sperimentato: discourse-jwt/plugin.rb at master · arivanandan/discourse-jwt · GitHub