Login System Discussione

bene ti offri volontario di farci una PoC ? :slight_smile:

Allora sono entrato oggi, ma perche’ no. Una semplice presentazione con docker e postman potrebbe andare bene? o devo prima capire come installare tutto l’ambiente e integrarlo nello stesso?

Le cose convergono! OpenMed vuole usare proprio Keycloak , contatta @mj8284 Marco Lecce per una PoC che può essere contribuita. Per IO-Gateway lascerei la decisione poi a @ggadaleta se quello che vede può essere utile.

1 Mi Piace

Ciao! Stavo studiando proprio in questi giorni Keycloak dopo aver letto nel forum della community che l’autenticazione del wiki non è in SSO ma bisogna riregistrarsi di nuovo… ma sono completamente digiuno di docker/k8s quindi sto andando molto a rilento… ma da quello che ho visto, sembra una soluzione molto flessibile in effetti… sto cercando di tirare su una vps che avevo in disuso con Keycloak, discourse e Wikimedia per vedere se ci riesco ed è fattibile…

A parte questo off topic di cui mi scuso, trovo molto comodo Keycloak proprio per il fornire un autenticazione semplice o complessa a piacere :slight_smile:

Tutta la configurazione (e un backup automatizzato :)) del wiki sta qui https://github.com/noiopen/wiki.noiopen.it se riesci a fare una pull-request che fa un SSO con discourse sarebbe abbastanza interessante.

1 Mi Piace

ciao @massimo.scattarella e benvenuto! ho creato un thread specifico per OpenMED :wink:

Per ora son riuscito a tirare su un docker con Keycloak con https (certbot), un docker con MediaWiki (ancora da configurare) ed un docker con nginx che fa da reverse proxy per mascherare gli altri servizi… appena finisco di riuscire a tirare su MediaWiki col doker ufficiale in https provo la funzionalità di SSO, poi passo a discord (altro docker) e se ci riesco magari provo a creare un docker-compose per poter permettere l’installazione e la configurazione del tutto.

Quando ci ho capito un po’ di più, cerco di integrare il tutto col tuo repo, cercando di tenere tutto in diversi docker che collaborino, così da poterlo in futuro deployare con un helm chart…

Di sicuro sto imparando parecchie cosette interessanti… spero di riuscire a produrre qualcosa da testare prima che i progetti di NoiOpen siano finiti :sweat_smile:

1 Mi Piace

Una cosa mi raccomando: qui molti imparano ma l’open source è fatto di piccoli contribuiti che vengono integrati. Sapessi quante volte capitano cose che vengono fatte e le PR non arrivano mai o non sono mergiabili. Quindi se fai quelle prove sarei felice di metterle in produzinoe. Come ho spiegato nel mio talk, nel contribuire al progetto openwhisk probabilmente il 90% del tempo se ne è andato nell’integrare il lavoro… non è cool ma è essenziale. È una cultura che come community dobbiamo avere.

2 Mi Piace

Sono pienamente d’accordo. Il mio problema attuale è che è la prima volta che utilizzo i docker quindi ho un piccolo guazzabuglio al momento e mi “vergogno” di pushare cose che non metterei mai nemmeno io online, specialmente perché mi mancano le personalizzazioni (tipo permettere di definire il dominio, le utenze/password, ora è tutto stato fatto a mano) :sweat_smile:

È anche la prima volta che contribuisco ad un progetto open, quindi devo “imparare” a contribuire e prioritizzare le mie attività…

Credo che per fare bene le due cose, per ora farò come mi hai consigliato, ossia tirare su qualcosa di pseudo-semplice con discourse/Keycloak ed intanto pushare quello, così che tu possa testarlo. Per poi passare all’integrazione con il MediaWiki che hai tu (così come l’hai fatto o usando il docker ufficiale senza il software in go che fa da webserver).

Grazie dei consigli… spero in questo weekend/ponte dell’8 dicembre di riuscire a condividere qualcosa di testabile anche da altri invece che solo sul mio vps :slight_smile:

2 Mi Piace

O addirittura potrei partire dal solo Keycloak integrato col tuo MediaWiki e POI passare a discourse… credo sia più lineare, che dici?

Puoi benissimo fare una PR che però mergio in un branch di prova, per vederla, e quando sarà pronta la mergio sul master e la deployo. Io sono sempre per “infrastructure as a code” e rendo tutto replicabile.

1 Mi Piace

Ciao @imoas83, a che punto sei arrivato con Keycloak? Se ti può servire una mano io in passato ci ho lavorato.

Fammi sapere :slight_smile:

Lui sta provando a implementare un SSO tra mediawiki e discourse anche se l’esperienza è interessante e potremo usarla anche per IO-gateaway

1 Mi Piace

Ciao @dirk39,
grazie per la proposta! In effetti, per me è tutto nuovo, anche se devo dire che dopo un weekend proficuo sto arrivando ad un goal parziale. La tua esperienza mi è sicuramente utile e vado ad elencare le perplessità che forse puoi aiutarmi a districare. Questo un recap della situazione attuale:

  • Tramite un docker-compose vado a tirare su un container mariadb, un container mediawiki ed un container keycloak;
  • Sia mediawiki che keycloak usano il container mariadb per salvare il proprio database (per ora unico, dove mediawiki ha un table_prefix ben definito per non incasinare il tutto). Avevo provato a fare più database ma in effetti con uno solo mi è venuto tutto più semplice, dal backup al restore ed all’utilizzo dei tools messi a disposizione dall’immagine di mariadb (con il restore del db all’avvio se non trova nulla ad esempio);
  • Ho terminato l’installazione di mediawiki e fatto un dump del database; provato ad eliminare tutto, ripristinando il dump e mediawiki funziona senza problemi;

Per ora lasciamo da parte keycloak e concentriamoci su mediawiki; Finito quindi il riepilogo, ecco ora i fatti e le domande:

  • Fatti:
    • Nel dump del database c’è la password (hashata) dell’utente admin di mediawiki (per ora molto semplice, in quanto pensata per l’infrastruttura di test);
    • Nel file di configurazione di mediawiki (LocalSettings.php) ci sono le credenziali di mariadb (anch’esse molto semplici);
  • Domanda:
    Come salvare il dump del database su github? Ed il file di configurazione?
  • Possibile soluzione:
    Salvo il dump del database (in .sql come faccio ora) ed il file di configurazione del mediawiki senza pormi problemi, in quanto nel docker-compose ho parametrizzato tutto e chiedo all’utente di fare le seguenti cose:
    • Riempire il file .env partendo da un .env.example così da scegliere le proprie credenziali nuove;
    • Tramite un target in un Makefile (soluzione copiata da Michele :smile:) vado a fare le seguenti cose in automatico senza intervento dell’utente:
      • Copiare il file di configurazione del mediawiki LocalSettings.php.example in LocalSettings.php e modificarci le credenziali del database con quelle nuove presenti nell’environment personalizzato (semplice);
      • Nel dump del db di mediawiki (noiopen.sql) vado a sostituire le credenziali dell’utente admin (meno semplice: devo capire come hashare la nuova password; in più, non servirà questo step qui una volta configurato l’accesso tramite keycloak);
      • Lanciare il docker-compose up che in automatico si pesca il .sql con le credenziali modificate e ricrea il db correttamente (solo la prima volta; se trova un db non fa nulla); Poi mappa il file di configurazione corretto e fa partire mediawiki correttamente;

Appuriamo che ci piace come soluzione. Procediamo allora alla parte keycloak.

  • Fatti: Supponiamo di aver fatto partire il docker di keycloak che si è creato il DB come piace a lui, con un’utenza di admin ed una password semplice; In più, supponiamo di aver creato e configurato il realm (per ora in modo molto semplice per l’ambiente di test).
  • Domande:
    • Come salvo il realm e l’utenza di admin di keycloak su github? Uso il dump del db?
    • Dove si modificano nel db di keycloak le credenziali per personalizzarle?
    • Il realm è meglio esportarlo in JSON, eliminarlo prima del dump del db e poi importarlo tramite il tool fornito dal docker di keycloak? O meglio lasciarlo nel db e poi modificare il db stesso? ed in caso, come si fa?
    • Quando avrò utenti registrati (tipo anche l’admin del mediawiki), come si salvano senza metterli su github per fare dei backup in produzione?
  • Possibile soluzione parziale:
    Per ora faccio un dump del db e lo ripristino, ma non saprei dove toccare per cambiare le credenziali; in più, potrei farmi un dump del realm in .json e reimportarlo tramite il tool fornito dal docker di keycloak, ma i client con i secrets (tipo mediawiki quando configurato per l’accesso tramite keycloak con Open ID Connect) dove me li salvo? Non vorrei lasciare le password in chiaro nel realm.json… quindi lo faccio fare al makefile come sopra (sostituzione della password easy con quella custom dell’utente che sta ricreando l’ambiente di test)? e tutti gli utenti? Quando sono in produzione, come si reimportano? E dove li salviamo in maniera semplice così che Michele possa fare dei backup giornalieri di tutto?

So che ho messo tanta carne al fuoco e forse scritta anche un po’ confusionaria, ma mentre su mediawiki ho trovato soluzioni sicure e semplici, su keycloak sono un po’ in difficoltà perché la complessità è leggermente maggiore, anche se ho visto che con le API si può davvero fare un mondo di cose…

Grazie se avrai avuto la pazienza di leggere fino a qui e se potrai darmi una mano. Conto entro domani di pushare su un mio repo forkato da quello di michele tutto quello che ti ho detto, così che - volendo - puoi partire da lì e fare delle prove con keycloak.

Ah, ed ho tralasciato la parte più importante: la generazione dei certificati SSL per l’https di mediawiki e keycloak quando si andrà in produzione in maniera automatica (magari tramite certbot)… e cosa usare come reverse proxy (io avevo abbozzato un nginx che mappava le varie porte dei docker su vari domini di terzo livello) ma questa cosa la terrei per dopo :smiley:

Ciao! Alla faccia giusto un paio di domande :sweat_smile: . Cerco di risponderti in base a quello che ho fatto io in passato.

Lascia stare, modificare le credenziali di Keycloak direttamente nel db è un bagno di sangue e può portare a esperienze spiacevoli come la corruzione del db.

L’esportazione del realm via JSON è essenziale per avere da parte la tua configurazione a prescindere dalla versione di Keycloak. Keycloak all’avvio verifica se è configurato correttamente e se gli mancano le configurazioni allora utilzza il JSON dichiarato.

A regime non potrai tenere il dump sql su GitHub ma piuttosto è meglio mettere da qualche parte il dump del database ed eventualmente recuperarlo se qualcosa andasse storto.

Come consiglio direi di dividere il database di Keycloak da quello di MediaWiki perché in caso di problemi con Keycloak non rischi di perdere pezzi della wiki.

Spero di aver risposto a tutto :slight_smile:

Per quanto riguarda i certificati, il docker keycloak supporta i certificati tls che vanno montati in una sua cartella.

Sarei per dire TL;DR (too long don’t read) ma l’ho letto.

Andiamo per ordine.

Il goal è un single sign on con discourse. Nota che è pensabile di installare il discourse nello stesso server se servisse. Senza single sign on non serve a nulla.

Puoi usare MySQL per MediaWiki. Seguendo lo scherma che ho usato basta esportare il database e committarlo su github. Lo facciamo fare ad uno script.

Se ci sta il sso non ci dovrebbe essere il problema delle password (si usano quelle di disccourse no?). Comuineu stanno tutte in una tabella users, niente di trascendentatale.

Per l’ssl non ti preoccupare ci pensa già caddy non è un tuo problema…

Quindi : installa mediawiki, aggancia in sso a discourse in qualche modo… e basta no? Serve altro? Mi sfugge qualcosa?

Se discourse supporta SSO con OIDC non credo ci siano particolari problemi. Ma su questo purtroppo non ne so nulla :sweat_smile:

Chiedo scusa per il post lungo, ma ho cercato di chiarirvi nel miglior modo possibile i problemi incontrati.

Per Michele, volevo usare Keycloak come autenticatore, sia per mediawiki che per discourse. Leggendo su internet, discourse può fare anche lui da single sign on authenticator, ma credo che passare per keycloak sia migliore, anche come esperienza propedeudica a IO-MED. Poi con le conoscenze di @dirk39 credo che potremmo arrivare a goal in maniera pulita… che ne dite?

Comunque direi che entro domani sera cerco di pushare sul mio repo (forkato da quello di Michele) il nuovo wiki con mysql e keycloak per ora sullo stesso db.

Poi mi concentro sul dividere i database come suggerito da Andrea (dirk39) e magari lui si occupa di “sistemare la parte di keycloak”, mentre io passo all’installazione del docker di discourse e vedere come integrare anche lui con keycloak (ho letto che non dovrebbe essere troppo difficile).

Siete d’accordo?

1 Mi Piace

La chiave però è capire se si può integrare con discourse… sennò il tuo push lo mettiamo a dormire in un branch :smiley:

Sarà la prima cosa che farò domani :smiley: