Autenticação usando a conta do Facebook, Google e Microsoft numa app de WP8.0

Este artigo tem como objectivo mostrar como conectar uma aplicação Windows Phone 8.0 à conta do Facebook, Microsoft e Google, para que com isto seja validada a autenticação na aplicação. O artigo irá portanto, focar-se nas funcionalidades de login e logout.

O exemplo do artigo usa MVVM Light Toolkit  e Cimbalino Windows Phone Toolkit, no entanto está fora do âmbito do artigo explicar como se usa estes toolkits, para mais informações por favor consulte as seguintes referências: Artigos sobre MVVM Light e Artigos sobre Cimbalino.

 No exemplo iremos usar as seguintes referências:

De salientar que cada provider requer que seja atribuído um app id/client id/client secret, informação esta que é obtida nas seguintes referências:


Antes de começar, deve-se definir a classe Constants com as várias keys, sem esta informação o exemplo não irá funcionar!

public class Constants 
    {         
        public const string FacebookAppId = ""; 
 
        public const string GoogleClientId = ""; 
 
        public const string GoogleTokenFileName = "Google.Apis.Auth.OAuth2.Responses.TokenResponse-user"; 
 
        public const string GoogleClientSecret = ""; 
 
        public const string MicrosoftClientId = ""; 
 
      ... 
    }

De seguida iremos ver como nos podemos conectar às várias contas. Para ajudar a abstrair a autenticação, foi criada uma classe SessionService cujo principal objectivo é gerir as operações de login e logout para um determinado provider. Isto é interessante porque na página LoginView são definidos os vários botões de autenticação e para cada um deles é atribuído um Command que irá lançar a acção e é enviado um CommandParamater que contém o nome do provider que será utilizado no SessionService e desta forma a página LoginView e a classe LoginViewModel serão mais simples e claras. Outra questão também relevante, é o facto que, depois da autenticação para cada provider, poder haver a necessidade de fazer um pedido de autorização no meu backend para aceitar o utilizador e com o SessionService apenas tenho que adicionar essa validação uma vez, em vez de ter que o fazer em cada provider (o que na realidade não faz muito sentido).

As classes criadas foram:

  • FacebookService contém todo o código necessário para efetuar a autenticação usando uma conta Facebook;
  • MicrosoftService contém todo o código necessário para efetuar a autenticação usando uma conta Microsoft;
  • GoogleService contém todo o código necessário para efetuar a autenticação usando uma conta Google;
  • SessionService chama os métodos de login e logout para cada provider;
  • LoginView representa a página para efetuar a autenticação;
  • LoginViewModel representa a view model da página LoginView.

Vejamos agora o código para cada classe.

Publicado na edição 46 (PDF) da Revista PROGRAMAR.