Abbiamo già visto come utilizzare i server scripts per assicurare la validazione dei dati direttamente dal servizio "on the Cloud". In questa lezione vedremo come integrare nella nostra app Windows Phone 8 l'autenticazione degli utenti, sfruttando account di terze parti supportati dai Mobile Services, come quelli offerti da Microsoft, Facebook, Twitter e Google.
Nel nostro esempio, saremo in grado di autenticare gli utenti e mostrare il loro User ID.
Registrare i provider di identità negli Azure Mobile Services
Per consetire agli utenti di autenticarsi al nostro servizio utilizzando un account provider di terze parti è necessario registrare nel Mobile Service le chiavi personali della nostra applicazione relative ai vari provider.
Accediamo al Portale di Gestione di Windows Azure, navighiamo fino alla pagina di dettaglio del nostro mobile service "Rubrica" e spostiamoci nella scheda "Identità". Ogni Account Provider richiede una coppia di chiavi, che è possibile ottenere registrando la nostra applicazione presso il provider.
Cominciamo ottenendo le chiavi per l'autenticazione con Facebook. È necessario innanzitutto creare una nuova Facebook Application. Accediamo al portale di Facebook Developers ed autentichiamoci con le nostre credenziali Facebook. Quindi, selezioniamo il link "Apps" nella barra di navigazione in alto, e scegliamo il tasto "+ Create New App
" in alto a destra nella finestra.
Inseriamo un nome per la nostra Facebook app, che deve essere univoco, e selezioniamo "Continue
". Una volta creata la nostra app, nel gruppo di opzioni in basso con il titolo "Select how your app integrates with Facebook" abilitiamo l'opzione "Website with Facebook Login". Ci verrà richiesto l'URL del sito Web che richiederà l'autenticazione: è possibile trovare l'URL del nostro servizio mobile nella scheda "Dashboard" del Mobile Service Rubrica sul Portale di Gestione di Windows Azure:
Una volta inserito questo valore nella casella di testo, prendiamo nota delle due chiavi mostrate in alto nella pagina, App ID e App Secret, e clicchiamo "Save Changes".
Le due chiavi che abbiamo ottenuto dovranno essere copiate nelle rispettive caselle di testo nella scheda "Identità" dell'Azure Mobile Service, quindi salviamo le modifiche. È importante sottolineare che la chiave segreta generata dai provider è un'informazione di sicurezza estremamente privata: non bisogna mai condividere questa chiave per evitare gravi problemi di sicurezza.
È possibile ripetere questi passaggi per tutti i provider di identità che si vogliono supportare per il proprio Mobile Service.
Proteggere l'accesso ai Mobile Services
Ora che abbiamo configurato gli account providers, possiamo proteggere l'accesso al nostro Mobile Service. Dalla pagina di dettaglio del servizio mobile Rubrica sul Portale di Gestione di Windows Azure, spostiamoci nella scheda "Dati", quindi clicchiamo sulla tabella "Contatti" per accedere alla sua configurazione. Spostandoci nella scheda "Permessi" possiamo vedere i criteri di accesso per le varie operazioni relative ai nostri Contatti.
Utilizzando le caselle a discesa, impostiamo la protezione a "Solo utenti autenticati" per tutte le operazioni, quindi salviamo le modifiche.
Autenticare gli utenti nell'app Windows Phone 8
A questo punto, se proviamo a lanciare la nostra app Windows Phone 8, non sarà possibile visualizzare i contatti e verrà lanciato un errore. Infatti, ora l'accesso è possibile solo per gli utenti autenticati. Modifichiamo quindi l'applicazione per supportare l'autenticazione tramite Facebook.
Apriamo la classe MainPage
e inseriamo questa riga di codice all'inizio del suo corpo:
private MobileServiceUser utente;
Questa variabile ci permetterà di tenere traccia dell'utente attualmente autenticato sull'applicazione.
Creiamo quindi il metodo che si occuperà di avviare l'autenticazione:
private async Task AutenticaUtente()
{
try
{
utente = await App.MobileService.LoginAsync(MobileServiceAuthenticationProvider.Facebook);
MessageBox.Show("Benvenuto, "+ user.UserId + "!");
}
catch (InvalidOperationException)
{
MessageBox.Show("Accesso fallito. E' necessario autenticarsi.");
}
}
Questo metodo prova ad avviare l'autenticazione dell'utente utilizzando Facebook come provider. È sufficiente modificare quel parametro per utilizzare un provider di autenticazione differente. In caso di errori, un messaggio avviserà l'utente che l'autenticazione è necessaria per utilizzare l'applicazione.
Non resta a questo punto che attivare l'autenticazione al momento dell'avvio dell'app. Eliminiamo il metodo OnNavigatedTo()
presente attualmente nella classe, e modifichiamo il costruttore della classe MainPage in modo da gestire l'evento Loaded
della MainPage
:
public MainPage()
{
InitializeComponent();
this.Loaded += MainPage_Loaded;
}
Aggiungiamo quindi il metodo MainPage_Loaded()
per attivare l'autenticazione e successivamente caricare i Contatti dall'Azure Mobile Service:
async private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
await AutenticaUtente();
LoadContatti();
}
Possiamo ora testare la nostra app Windows Phone 8: all'avvio, ci verrà richiesto di effettuare l'accesso con il nostro account Facebook e una volta acceduti potremo finalmente ottenere la nostra lista di contatti.
Grazie ai Windows Azure Mobile Services, integrare i più popolari servizi di autenticazione di terze parti nelle app mobile, Web e Windows Store diventa estremamente semplice.