Personal tools
Autenticazione tramite social network con Plone? E' facile!

Facebook? Linkedin? Google+? Twitter? E perchè non tutti?!

Aug 26, 2014

Autenticazione tramite social network con Plone? E' facile!

L'autenticazione social aggiunge valore ai nostri siti, ma la sua realizzazione può essere uno sforzo non trascurabile. Vediamo come affrontarla con Plone!

In questo articolo introdurrò un prodotto Plone che ci ha reso possibile l'autenticazione e la profilazione di utenti usando il proprio social network preferito: pas.plugins.velruse.

Vedremo i motivi per cui il plugin è stato sviluppato e le alternative possibili.

Tanto Tempo Fa, In Un Web Lontano Lontano

Lo sapere cos'è questo?

Join form Plone

Se avete risposto "un form di iscrizione ad un sito" avete sbagliato. Oggigiorno la risposta migliore è "il metodo più veloce per far allontanare il visitatore dal vostro sito".

Non è certo una novità che gli utenti del Web:

  • Abbiano fretta. Devono veramente essere interessati al vostro servizio per voler investire tempo nell'attivare nuove credenziali. Chiedete ad un utente di iscriversi al vostro sito solo se strettamente necessario.
  • Siano allergici alla creazione di nuovi account. Tutti noi custodiamo gelosamente un numero minimo di credenziali (posta elettronica, social network, la propria banca, ...) ma diventa estremamente complesso gestire un numero sempre crescente di servizi che richiedono autenticazione e profilazione utenti.

I gestori di credenziali, quasi sempre integrati nei maggiori browser, possono aiutare ma sono tutto sommato dei palliativi. La cruda realtà è che molti utenti in presenza della richiesta di iscrizione passano oltre.

 

La richiesta di credenziali va quindi evitata in tutti i modi o, se proprio necessaria, va resa talmente semplice da diventare banale.

La password che non dimentichi mai

Eppure la soluzione perfetta esiste, ed è passata inosservata nelle righe qui sopra.
Ci sono alcuni servizi senza i quali l'utente medio del Web non riuscirebbe a vivere! In alcuni casi questi servizi giustificano l'accesso alla rete da parte di una certa categoria di utenti.

Sto parlando dei social network!

Quante persone conoscete che visitano il proprio profilo Facebook non meno di 10 volte al giorno? Non so voi, ma io parecchie!

Per questi utenti ricordarsi lo username e la password di Facebook non è un problema (e, come vedremo poi, molto spesso non è necessario ricordarsi nemmeno questi dati).

Badate bene: Facebook non è l'unico esempio. Magari esistono persone che non hanno un account su questo social network ma usano spasmodicamente Twitter. Cambia qualcosa? No!

"Io sono a-social! Non uso nessun social network! Di vedere le foto del tuo gattino non me ne può importare meno!"

Già... esistono anche queste categorie di utenti. Magari sono una nicchia ma non è detto siano un numero così esiguo da dover essere ignorato.
Volete forse dire che queste persone non leggono nemmeno la posta? Tutti noi non abbiamo forse un account Google, per usare uno dei suoi numerosi servizi quali YouTube, GooglePlus, GMail, ...?

"Io sono a-social e combatto Google, perché penso sia il Grande Fratello del futuro!"

Ok... ma non siete nemmeno interessati alla vostra vita lavorativa? Non tenete aggiornato il vostro curriculum su Linkedin?

"Io sono a-social e combatto Google, perché penso sia il Grande Fratello del futuro e non trovo Linkedin utile perché è il lavoro che cerca me, non il contrario."

La cosa qui inizia a farsi difficile. Questa categoria di utenti è data di solito dai programmatori... della sottospecie "Programmatore Che Si Crede Membro Di Anonymous".

Eppure anche tu, oh Hacker Che Vivi nell'Ombra, non utilizzi forse uno dei famosi servizi di hosting di codice come GitHub o Bitbucket per rendere pubblico il tuo lavoro che salverà il mondo (ovviamente, rilasciato sotto licenza GPL 3!)?

Ironia a parte, come avrete capito, lo scopo è trovare un servizio indispensabile all'utente e una password che questi non abbia problemi a ricordarsi.

OAuth (come lo spiegherei alla mia Mamma)

Che cosa hanno in comune tutti i servizi che ho citato sopra? Sono tutti OAuth provider.
Cos'è OAuth? E' uno standard per la condivisione di dati e credenziali fornite da un provider ad un altro servizio a seguito di una esplicita autorizzazione dell'utente.

Belle parole, ma passiamo ai fatti.
Diciamo solo che questa tecnologia è quella che può salvarci dal doversi ricordare nuovi account ancora ed ancora; sono in realtà certo che l'abbiate già usata, magari senza sapere quello che stavate veramente facendo.

Facciamo un esempio pratico: il noto quotidiano "La Repubblica" ha la sua controparte Web disponibile al sito repubblica.it.
Il sito ovviamente non richiede autenticazione di per sé ma gli articoli sono commentabili dagli utenti; se navigate un po' noterete che i commenti non sono pochi.
In questo caso la profilazione dell'utente è necessaria (anche per evitare problemi di tipo legale) ma credete forse che repubblica.it obblighi un'iscrizione al sito?

Cosa succede cliccando sull'area di aggiunta di un nuovo commento? Si apre una finestra di popup così composta:

Commentare sul sito

Sebbene sulla destra ci sia la possibilità di creare un nuovo account nel sistema interno del portale, state pur certi che il 95% degli utenti viene attirato dai famigliari pulsantoni colorati sulla sinistra e sceglierà il proprio social network/servizio preferito.

Autorizzazione Twitter

A questo punto (qui sopra ho selezionato Twitter) la pagina successiva non è più del sito repubblica.it, ma mi sono spostato su twitter.com.

E' quindi Twitter mi sta chiedendo:

  • di autenticarmi
  • di autorizzare il sito repubblica.it ad accedere ad alcuni dei miei dati

Il primo passo poi non è detto sia necessario. Se con il browser utilizzato si era già autenticati in Twitter (quanti di voi immettono tutti i giorni la password di Facebook/Twitter/Google ogni mattina? Scommetto pochi...) non ho bisogno di autenticarmi di nuovo ma solo di confermare la richiesta si autorizzazione.

A questo punto eccomi autenticato (usando Twitter) sul sito de "La Repubblica", pronto a commentare la notizia/il video, etc. Il tutto in modo molto semplice e trasparente.

Pronto a commentare su

E' molto importante notare come la mia password Twitter non è stata data al sito repubblica.it. Questo sito ha accesso ad alcuni miei dati (da qui la richiesta di autorizzazione) ma nulla più.

Lost in OAuth

Ma quello che fa "La Repubblica.it" è fattibile nel mio nuovo sito Web?

L'utilizzo di un OAuth provider come fonte di autenticazione nel proprio sito Web si compone in due fasi:

  • la creazione di un'app nel provider
  • il collegamento tra il provider e il nostro servizio Web (parlando OAuth/OAuth 2).

Creare una nuova app è tutto sommato semplice (anche se ogni provider ha ovviamente procedure differenti e le prime volte si potrebbe fare un po' di confusione, ma nulla che una ricerca su Google non possa sistemare)

A questo punto però il vostro nuovo e scintillante sito Web dovrà trovare una libreria che permetta di "parlare OAuth"... e qui a volte nasce la vera complessità perché ogni servizio è differente. Maggiore è il numero di servizi che volete supportare, maggiori saranno i grattacapi da affrontare.

E' prova di questo il fatto che esistano aziende quali Janrain che fanno la loro fortuna unificando le differenze di accesso dei vari social e fornendo un'interfaccia comune: lo sforzo a questo punto diventa quello di parlare col servizio offerto da Janrain che a sua volta astrae le differenze che andremmo ad affrontare.

Un servizio per dominarli tutti.

Autenticazione social con Plone

Dato che il form di iscrizione che ho mostrato all'inizio di questo articolo è quello di un sito Plone, vediamo come possiamo semplificare l'autenticazione nel nostro amato CMS utilizzando altri authentication provider.

Vi sono varie strade, vediamole tutte per darvi modo di trovare la vostra.

cs.auth.facebook e cs.auth.twitter

Codesyntax ha sviluppato una serie di plugin di autenticazione Plone (PAS plugin) per l'accesso ai due più noti social network:

Non c'è molto da aggiungere se Facebook e Twitter sono tutto quello che vi serve.

Se qualcuno di voi sta dicendo "Ehi! Ne mancano alcuni, per lo meno Google!" posso solo dirvi: avete ragione.
A questo punto il vostro sforzo sarebbe quello di scrivere un plugin dall'ipotetico nome "cs.auth.google" che ricopra questa mancanza... e così via fino ad aver ottenuto un supporto per tutti i social network che vi interessano.
Ma ci sono lati negativi:

  • lo sforzo potrebbe non essere irrisorio
  • avrete installato ben 2, 3 o più prodotti aggiuntivi Plone
  • ogni volta che "qualcosa" cambia in uno degli authentication provider dovrete correre ai ripari e verificare che tutto funzioni.

plonesocial.auth.rpx

Ma se, come ho detto sopra, esistono aziende che si sono fatte carico di gestire tutto questa complessità, non esiste un unico plugin Plone per gestirli tutti?

Ovviamente sì. plonesocial.auth.rpx permette l'autenticazione su tutti i maggiori social network usando un singolo prodotto Plone ma sfruttando i servizi offerti da Janrain!
Per di più lo abbiamo già usato con successo in passato.

I giochi sono fatti. O no?

Privacy?!

Per quanto parlare di privacy in un articolo che illustra come autenticarsi usando social network possa sembrare un controsenso, ci siamo trovati ad dover affrontare anche questo argomento.

Molti lo ignorano ma la Normativa Italiana ha regole molto precise sul trattamento dei dati personali per i siti delle pubbliche amministrazioni. Ci è stato chiesto di avere l'autenticazione con social network in un sito Plone di una pubblica amministrazione.

La nostra prima scelta è ricaduta ovviamente su plonesocial.auth.rpx per poi scoprire che non era utilizzabile.
Che uso fa Janrain dei dati degli utenti (poiché Janrain è un tramite è ovvio che sia in possesso di alcuni dati degli utenti... a ri-ecco il Grande Fratello)?

Per aumentare la complessità della cosa era poi presente la richiesta di potersi autenticare usando anche FedERa, un sistema di autenticazione per i cittadini della Regione Emilia Romagna.
Janrain ovviamente non sa nulla di cosa sia FedERa.

A questo punto si è anche valutata l'implementazione di tutti i plugin PAS che al momento Plone non supportava (Google +, FedERa, ...) ma Andrew aveva già usato un'ottima alternativa  per l'uso di OAuth.

Velruse

Esiste un software Python per il framework Pyramid che replica le funzionalità offerte da Janrain senza però basarsi su servizi altrui: Velruse.

Velruse è Open Source, ed in questo modo il discorso privacy viene ampiamente superato, ma soprattutto è pluggabile.
Il prodotto offre di per sé un numero enorme di possibili provider ma rende semplice l'integrazione con nuove fonte dati... come lo è FedERa!

pas.plugins.velruse

Da qui il passo finale è stato davvero semplice. Abbiamo sviluppato un nuovo plugin PAS il cui scopo fosse quello di comunicare con un servizio Pyramid/Velruse (gestito dall'Ente stesso) per ottenere i dati degli utenti.

E' Velruse che si occupa di comunicare con i vari social network (FedERa incluso) nascondendo le complessità sottostanti. Il risultato finale è comunque un servizio di autenticazione social sullo stile di quanto ho mostrato per repubblica.it.
Plone ottiene i dati in modo uniforme: utenti del sito già profilati e con vari metadati disponibili (email, nome, ritratto, ...).

Durante le prime esperienze con Velruse (Velruse 1.0) abbiamo trovato alcune carenze minori: la foto dell'utente, sebbene disponibile, non veniva raccolta così come altri metadati come la località, l'email era assente da Linkedin, ...

Ma non stavamo parlando di un progetto Open Source? E allora perché non contribuire?! Dopo un paio di modifiche accettate nel progetto originale, la versione 1.1 ha risolto tutti i nostri problemi.

Login social completo

Per maggiori informazioni sul progetto vi rimando alla presentazione di Stefano.

La realizzazione di pas.plugins.velruse non sarebbe stata possibile senza il lavoro di (in ordine di importanza):

  • Ben Bangert - creatore di Velruse
  • Andrew - per aver scoperto ed utilizzato per primo questo prodotto dandoci le dritte iniziali
  • Mauro - per aver realizzato il plugin per FedERa ed averci supportato nelle installazioni Pyramid
  • Ed infine io e Andrea, che abbiamo sfruttato il lavoro altrui ed ora ce ne prendiamo i meriti.

Mr Burns"Il lavoro di squadra ti fa avanzare un tantino, poi la persona evoluta fa quello scatto in più per la gloria personale"
- Charles Montgomery Burns

Autenticazione Social? E' facile!

Spero che questo articolo vi abbia aperto gli occhi su quanto possa essere sconsigliato oggigiorno utilizzare la profilazione utente "in stile classico" (per non dire "vecchio") e che le alternative per una semplice integrazione OAuth ci sono (per lo meno: con Python e Plone!).

PS: caro lettore, ora sono sicuro tu stia per commentare questo articolo per dirci quanto siamo stati bravi. Non ti sei accorto che per i commenti a questo blog puoi usare i tuoi social network preferiti?!
Perderesti tempo a commentare se fossi obbligato ad iscriversi al blog?

Pensaci... :)

L'immagine di Monty viene da Wikipedia, le schermate del sito repubblica.it sono state prese dal sito stesso.

Filed under: , , , , ,
comments powered by Disqus