Guest Post: Integrazione tra DotNetNuke e Facebook; un caso reale: gymmit.com

Questo è un post della serie “Guest post” che ospita autori esterni al team di MSDN Italia.

Questo post è stato scritto da Davide Senatore, MVP di cui potete leggere articoli oltre che dal suo blog anche sulla community XeDotNet.

DotNetNuke e Facebook: forse possono sembrare due mondi molto distanti tra loro, ma non è così. L’integrazione tra i due sistemi, integrazione che consente di registrare ed autenticare un utente di DNN sulla base del suo account Facebook, è fattibile e alla portata di tutti. Vediamo innanzitutto di descrivere le due piattaforme e di capire come questa integrazione sia possibile.

DotNetNuke è un Content Management System, ma molto prima di essere un CMS è un Framework. Esso mette a disposizione dello sviluppatore una serie di API di base (Autenticazione, Gestione security, eventlog, scheduling, gestione utenti, advertising e molto molto altro) che possono essere utilizzate per costruire virtualmente qualsiasi cosa. Personalmente amo immaginare DNN come una grossa scatola di Lego con molti mattoncini complessi che possono essere combinati a piacere, senza dover “reinventare la ruota” ogni volta che si affronta un nuovo progetto. Le possibilità offerte da questo framework sono infinite grazie alla semplicità con la quale si possono integrare nuovi moduli sviluppati con ASP.net in linguaggio C# o VB.net. Lo sviluppo di un modulo, infatti, consente di connettersi ad un altro database, inviare mail, connettersi a web services e, più generalmente, di implementare qualunque funzione si desideri all’interno del Framework di DNN.

I pregi di questo approccio sono dati da una velocità di sviluppo di web applications che non ha pari. Un solo sviluppatore con un buon skill su ASP.net può realizzare funzionalità che avrebbero altrimenti richiesto mesi e molte persone per essere create. Inoltre la possibilità di creare skin personalizzate, l’integrazione totale con jQuery ed una generale “sensibilità” agli standard del web permettono la creazione di web applications assolutamente cross-browser.

Facebook non ha bisogno di presentazioni. È IL Social Network. Con i suoi milioni di utenti è diventato lo Standard “de facto” della Socializzazione sul web e viene sempre più utilizzato per effettuare autenticazioni su siti di terze parti.

Di fatto, l’utilizzo dell’autenticazione integrata con Facebook elimina la barriera all’ingresso del nostro sito, rendendo più semplice ed appetibile la registrazione ai nuovi utenti. In pratica questa tecnica consente al nostro utente di:

  • Non ri-digitare tutti i dati che lo contraddistinguono, demandando ad un secondo momento l’arricchimento del suo profilo
  • Non dover ricordare un numero cospicuo di password, disseminate su molti siti
  • Utilizzare la tecnica del Single-Sign-On nel caso (sempre più ricorrente) in cui egli sia già autenticato su Facebook, eliminando addirittura la necessità di autenticarsi nel nostro sito

Se il nostro obiettivo è sviluppare un Social Network, non possiamo ignorare l’autenticazione e l’integrazione con Facebook.

Facebook, da parte sua, mette a disposizione una ricchissima API REST che può essere utilizzata non solo per effettuare l’autenticazione, ma anche per condividere informazioni sulla propria bacheca, inviare messaggi ai propri amici, pubblicare foto e molto altro. L’utilizzo di REST+JSON consente di invocare i servizi di Facebook da qualunque dispositivo ed in particolare da un’altra web application.

Si possono trovare maggiori informazioni e documentazione attinenti all’autenticazione e alle chiamate REST su http://developers.facebook.com/

Schema

Come si può vedere, per implementare l’autenticazione su Facebook è sufficiente:

  • Creare un’applicazione in Facebook, in modo da ottenere un ID e una serie di chiavi “segrete”
  • Utilizzare l’esempio che si può trovare sul sito developers.facebook.com per implementare lo scenario request-response necessario a scambiare i dati tra la nostra applicazione e Facebook.

Prestiamo particolare attenzione al fatto che nel nostro sito NON verranno mai richieste, né salvate le credenziali dell’utente di Facebook, pertanto sia lo Username che la Password verranno inserite in un contesto https sotto il controllo di Facebook. L’unica risorsa che verrà condivisa tra la nostra applicazione e Facebook è un token di sessione.

DotNetNuke, come del resto qualunque altra Web Application, può essere integrata con Facebook utilizzando le librerie per ASP.net disponibili su Codeplex:

In DotNetNuke, l’autenticazione integrata con Facebook si basa sull’utilizzo delle API di base della security di DNN, ovvero delle routine per la creazione di un utente e del metodo (UserLogin) per effettuare la login. In pratica, dopo aver effettuato la chiamata alla nostra “Facebook Application” e dopo che l’utente avrà accettato di condividere alcune informazioni con la nostra applicazione, verrà fatta una chiamata alla nostra web application e noi dovremo, nell’ordine:

  • Controllare che esista il token di Facebook
  • Contattare facebook tramite la REST API messa a nostra disposizione, utilizzando il token di sicurezza appena letto
  • Leggere l’id utente di Facebook e gli altri dati utili per registrarlo
  • Controllare se l’utente con la stessa mail esiste in DNN
  • e esiste, provare ad effettuare la login automatica con il metodo UserLogin
  • Se non esiste, creare l’utente e i dati del suo profilo e successivamente effettuare la login automatica

image

Un esempio di integrazione tra Facebook e DNN si può vedere nel mio progetto di Social Network per lo Sport ed i Centri Sportivi gymmit.com (http://www.gymmit.com).

Gymmit è il Social Network per lo Sport, Centri Sportivi, Palestre, Piscine ed ha come mission la promozione di uno stile di vita sano e la diffusione della mentalità del “Social Wellness” ovvero della pratica dello sport in compagnia o come mezzo per fare nuove amicizie o trovare persone che possano aiutarci ad iniziare a praticare uno sport che ci attira ma che non siamo mai stati in grado di affrontare. Le funzionalità di Gymmit sono moltissime e annoverano:

  • Gestione sport dell’utente
  • Creazione squadre, eventi, partite, gruppi
  • Creazione disponibilità e notifiche per praticare sport
  • Ricerca amici per affinità di sport, zona, centro sportivo
  • Ricerca centri sportivi per caratteristiche
  • Pubblicazione calendari corsi dei centri sportivi
  • Moltissime altre…

In questo caso, avendo implementato un intero Social Network, era assolutamente necessario introdurre una forma di autenticazione/registrazione integrata con facebook, essendo la maggior parte degli utenti già presenti nel più diffuso Social Network. Questa integrazione, infatti, consente di eliminare le remore, le diffidenze e quella “barriera” all’ingresso che rappresenta l’ostacolo principale in ogni sito che offra servizi previa registrazione dell’utente.

DotNetNuke si è rivelato estremamente flessibile e personalizzabile e l’integrazione stessa è stata piuttosto agevole, grazie anche alla produttività offerta da Visual Studio ed alle tecniche di sviluppo di moduli di DotNetNuke “esterne” al core del progetto DNN stesso, che assicurano semplicità di testing delle funzionalità custom e facilità di deployment in produzione.