Penso che molti di Voi avranno letto con apprensione l'annuncio apparso nel Developer blog di Google (Modernizing OAuth interactions in Native Apps for Better Usability and Security - in linkografia) in cui si dice che non verrà più supportato l'autenticazione outh con le web-view, guarda caso quella utilizzata proprio dal'SDK di  Azure Mobile Client.

Senza scendere troppo nel dettaglio quando si usa l'autenticazione di Google per accedere ai servizi Azure, e l'SDK Azure Mobile Cliente, al lancio del comando loginasync del citato SDK si viene direzionati a una pagina web che ci chiede la userid e password: l'oggetto del contendere è in pratica il modo in cui viene visualizzata tale pagina,

Sino ad oggi si usa il web browser di default (embedded browser) installato sul dispositivo (tutto il processo è ovviamente trasparente: basta lanciare loginasync e tutto avviene in modo automagico), ma questo a Google non piace più, e obbliga a rivedere il processo di autenticazione.

Qui da noi c'è un termine che rende bene l'idea: "Cenino col broncino". Questo avviene quando una coppia esce a cena insieme, e c'è qualche tensione: l'arrabbiatura non è tale affinchè l'offeso se ne vada a casa, ma nemmeno si tratta di una scaramuccia da poco. Magari poi si sistema tutto, ma intanto nella cena insieme si vive qualche tensione.....

Questa secondo me è la situazione che c'è tra chi scrive app usando Xamarin e Azure Mobile Client SDK, e Google.

Essendo che alcune mie app basate su Xamarin Forms ed Azure usano proprio questo metodo di autenticazione mi sono messo alla ricerca di informazioni che mi permettessero di capire meglio il dafarsi, e Le condivido con Voi.

Desidero sottolinerare che ad oggi la M$ a mio parere non ha ancora fornito direttive e informazioni chiare a riguardo: molte delle info che segnalo nel seguito le ho ottenute in modo "carbonaro" e quindi rischiano di essere imprecise o lacunose. Me ne scuso. Ma daltronde da un blog che si intitola così che volete pretendere ??

  • Dal 20 Ottobre 2016 (!) non sarà più possibile creare nuovi progetti (dal Google Developer Portal) che usino questo tipo di autenticazione. I progetti creati prima di tale data continueranno ad andare sino al 20 Aprile 2017. Dopo tale data OAuth google con web-views non funzionerà più.
  • Sembra che M$ stia lavorando a un aggiornamento dell'SDK che permetterà di ovviare al citato problema, ma ad oggi non se ne sa nulla di preciso: il codice esistente dovrà essere modificato ?? Quando sarà disponibile l'aggiornamento ?? Quando e se ne saprò di più ne scriverò qualcosa.
  • L'alternativa per continuare a usare tale tipo di autenticazione è usare la "client-flow". In pratica si programma la nosta app affinchè si autentichi direttamente con Google, ottenendo indietro un Google OAuth access token, che deve essere usato come parametro al lancio della loginasync: Azure Mobile App quindi validerà il token e fornirà alla nostra app un ZUMO token, concludendo il processo di autenticazione. Per mettere in piedi "tutto questo cinema" si può usare l'SDK di google, oppure Xamarin.Auth (e Xamarin.Auth.Extension per introdurre l'indispensabile refresh dei token).
  • Un'altra alternativa è usare le Chrome Tabs: francamente non ne so molto, e non so come e se possano essere implementate agilmente all'interno di app Xamarin Forms. Vi segnalo questa opzione solo per completezza.
  • Infine ci si può dimenticare di tutto e affidarsi a servizi di terze parti, come per esempio Auth0 (vedi linkografia) (come al solito desidero specificare che questa NON è una pubblicità, non prendo alcun compenso per segnalarVi un'azienda piuttosto che un'altra: tutto quanto scrivo qui sono mie considerazioni personali).

Personalmente sto migrando tutto alla "custom Auth": forse sbaglierò ma ho maturato l'idea che per app professional-grade occorra usare o la custom Auth oppure l'AD Azure.

Eppoi di cenini col broncini francamente ne ho abbastanza......

Happy coding....

Linkografia

Google Dev Blog: Modernizing OAuth interactions in Native Apps for Better Usability and Security

Authenticating Users with an Identity Provider

Auth0: Single Sign On & Token Based Authentication