Accueil Nos publications Blog Etendre vos permissions Facebook avec Windows Azure Mobile Services

Etendre vos permissions Facebook avec Windows Azure Mobile Services

windowsazure_logo-300x44Wilfried, que nous connaissons très bien, a écrit il y a quelques temps un excellent article sur Windows Azure Mobile Services. Toutefois, les méthodes dont il a parlé présentent quelques limitations. En effet, il n’est pas possible (en tout cas à ce jour) d’utiliser d’avantage de permissions avec Facebook en utilisant Windows Azure Mobile Services. Je vous propose d’y revenir et de voir comment nous pourrons étendre les permissions Facebook en n’utilisant que Azure.

Etat des lieux

Aujourd’hui, quand on souhaite utiliser Facebook dans son application, on a la possibilité essentiellement d’utiliser le SDK Windows Azure Mobile Services ou le SDK Facebook.
Dans une application Windows Phone, pour utiliser le premier, il ne suffit que de quelques lignes :


public static MobileServiceClient MobileService = new MobileServiceClient("https://YourMobileService/", "SECRET_HERE");

public async void MobileServiceAuthenticate(JObject token)
{
try
{
MobileServiceUser user;
if (token != null) {
user = await MobileService.LoginAsync(MobileServiceAuthenticationProvider.Facebook, token);
}
else {
user = await MobileService.LoginAsync(MobileServiceAuthenticationProvider.Facebook);
}
MessageBox.Show("Success !");
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}

Par défaut, quand on utilise Windows Azure Mobile Services, voici ce que nous pouvons voir pour le premier écran de connexion
Permissions par défaut Mobile Services
Les permissions accordées par défaut sont les données publiques du profil et la liste d’amis uniquement. Si l’on souhaite donc obtenir plus de droits (comme la récupération de l’email, les photos des contacts, etc…), il faut donc absolument passer par le SDK Facebook.

Utiliser le SDK Facebook

Les articles qui parlent de ce SDK sont nombreux et faciles à trouver, donc, je ne reviendrai pas ici sur son installation et son utilisation :-).
Pour pouvoir l’utiliser, nous avons besoin d’autant de lignes que l’exemple précédent :


private async Task AuthenticateAsync()
{
try
{
var facebookSessionClient = new FacebookSessionClient("APP_ID");
_session = await facebookSessionClient.LoginAsync("Facebook Application Rights");
_accessToken = _session.AccessToken;

//The Magic Goes Here !
}
catch (InvalidOperationException e)
{
//Error Management Goes Here ;D
}
}

Et c’est la mine de rien que tout se passe.

Utiliser Windows Azure Mobile Services … et un token

On a pour habitude d’:
1/ Utiliser Windows Azure Mobile Services, pour bénéficier des permissions basiques ou juste de l’authentification
2/ Utiliser le SDK Facebook pour bénéficier de permissions plus évoluées.

Ce qu’il faut savoir, c’est que le token généré par le SDK Facebook est générée à partir des autorisations qui auront été accordées à l’application.
Les permissions Facebook de Windows Azure Mobile Services peuvent être donc étendues simplement en passant à la méthode LoginAsync le token renvoyé par le SDK Facebook.


var facebookSessionClient = new FacebookSessionClient("SECRET_HERE");
_session = await facebookSessionClient.LoginAsync("user_about_me,read_stream,email");
_accessToken = _session.AccessToken;

var token = new JObject {"access_token", _accessToken};
await MobileService.LoginAsync(MobileServiceAuthenticationProvider.Facebook, token);

Et c’est tout :-). On bénéficie ainsi des mêmes permissions que l’application Facebook ! C’est un peu contraignant pour le moment mais, nous espérons fort voir le tout géré au sein de Mobile Services!

Conclusion

Voilà ! Nous avons pu montrer comment il est possible d’étendre les permissions et de faire en sorte que cela fonctionne, pour toutes les plateformes, et cela, sans avoir à redéployer nos applications :-). Bon développement !