Gestione automatica della sessione con OAuth SSO

Ciao,

Stiamo gestendo una suite di servizi per una comunità chiusa specifica e stiamo valutando l’inclusione di Discourse come piattaforma sociale. Mi chiedo qual sia il modo migliore ed più elegante (a livello tecnico) per integrare in modo trasparente un’istanza di Discourse nella nostra suite.

Facciamo un esempio: la nostra suite include il servizio A e il servizio B (sviluppati internamente) nonché un servizio OAuth2 SSO.

Se un utente clicca per accedere dal servizio A o dal servizio B, viene reindirizzato al servizio SSO dove effettua il login e poi viene reindirizzato indietro come di consueto. Tuttavia, grazie a cookie e controllo delle sessioni, l’accesso al servizio A non richiederà all’utente di effettuare nuovamente il login sul servizio B se decide di visitarlo successivamente (avrà già una sessione attiva).

Allo stesso modo, vorremmo un modo per permettere agli utenti di navigare in modo trasparente verso il servizio Discourse dal servizio A o B dopo aver effettuato il login tramite il servizio SSO. Si assuma che l’utente esista già in tutti i servizi. Attualmente, il plugin OAuth2 di Discourse è stato valutato e funziona con il nostro servizio SSO, ma richiede agli utenti di cliccare nuovamente su “Accedi con SSO” quando visitano Discourse. Esiste un modo, ad esempio una chiamata API, per avviare automaticamente una sessione anche su Discourse quando gli utenti accedono tramite l’SSO comune dal servizio A o B?

Inoltre, la domanda sopra si estende anche all’integrazione dei commenti tramite il componente incorporato. Mantenere un servizio Discourse “pubblico” non pone problemi per la sezione commenti, e i commenti vengono incorporati correttamente. Tuttavia, se si esegue un servizio Discourse privato, la finestra dei commenti incorporata non visualizzerà correttamente i commenti se l’utente non ha effettuato il login anche su Discourse in precedenza, il che rappresenta un problema quando si parla di integrazione trasparente.

Esiste un modo per aggirare questi problemi? Stavo pensando di costruire un plugin middleware che decodifichi un token o un cookie e autentichi e effettui immediatamente il login per l’utente appropriato prima di effettuare la chiamata effettiva. Esiste già un plugin del genere?

Grazie per il vostro supporto.

Per questo è sufficiente abilitare l’impostazione del sito login required.

Abilitare l’impostazione del sito login required risolverà anche questo problema.

Grazie per la rapida risposta. Tuttavia, questo non risolve il problema. Sia nella finestra dei commenti Discourse incorporata sia accedendo direttamente al sito Discourse, l’utente (già autenticato, ad esempio, su “servizio A” tramite SSO) deve effettuare nuovamente il login.

In entrambi i casi viene visualizzato un messaggio di benvenuto: “Benvenuto. È necessario un account. Chiedi un invito a un membro esistente o effettua il login per continuare.” insieme al pulsante di login. Quando clicco su di esso, appare una finestra di login che mi chiede di autenticarmi tramite nome utente e password o tramite OAuth SSO. Non è necessario reinserire le credenziali del SSO perché la sessione SSO è ancora attiva, ma non desidero che gli utenti debbano passare per questa procedura. Quando l’utente si autentica su “servizio A”, deve essere automaticamente loggato anche su Discourse, senza dover premere nuovamente il pulsante “Accedi”.

Cosa è necessario per ottenere questo risultato?
Sto utilizzando la versione 2.5.2 di Discourse, se ciò è rilevante.

Nell’ultima versione di Discourse, a condizione che siano abilitate sia “login richiesto” che “autenticazione immediata”, l’utente verrà automaticamente registrato su Discourse purché abbia già un cookie valido nel Provider di Identità.

Nelle versioni precedenti all’ultima, questo flusso di “magico” accesso era limitato ai siti che utilizzano il nostro protocollo SSO, descritto in Single-Sign-On ufficiale per Discourse (sso).

Consiglio di aggiornare all’ultima versione.

Hmm, sto usando le immagini Bitnami e l’ultima versione è ancora la 2.5.2, quindi dovrò probabilmente aspettare un po’ (o trovare un modo per eseguire un aggiornamento manuale, oppure usare un’altra immagine).

Comunque, grazie per avermi indicato la strada giusta. Molto apprezzato!

Tieni presente che le immagini Bitnami non sono supportate dagli sviluppatori di Discourse e, nel corso degli anni, hanno presentato molte incompatibilità con l’uso normale del software. Consiglio vivamente di utilizzare una Installazione Standard Ufficiale di Discourse.