Wilfried Woivré & .Net

Access Control Service : Récupérer l’ID Facebook de vos utilisateurs

JANV21

Récupérer le Facebook Id de ces membres est extrêmement utile pour tout site, ou application, en effet, grâce à celui ci on peut facilement identifier un membre sur nos différentes applications ou sites, et faire des recoupements avec ces amis ! Bref c’est utile !

 

Donc voici, une petite méthode d’extension qui vous permettra de récupérer le Facebook Id de vos membres, s’ils se sont connectés via Access Control Service avec un provider Facebook :


  1. public static class FacebookIdentityProviderUtils
  2. {
  3.     private const string Facebook = "Facebook";
  4.     private const string Federation = "Federation";
  5.     private const string IdentityProviderClaimType = "http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider";
  6.     private const string NameIdentifierClaimType = "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier";
  7.  
  8.     public static int GetFacebookId(this IPrincipal principal)
  9.     {
  10.         if (principal == null)
  11.             throw new ArgumentNullException("principal");
  12.  
  13.         if (principal.Identity.AuthenticationType == Federation && principal.Identity.IsAuthenticated)
  14.         {
  15.             var identity = principal.Identity as ClaimsIdentity;
  16.             
  17.             // Check Facebook
  18.             if (identity != null && identity.Claims.First(c => c.ClaimType == IdentityProviderClaimType).Value.StartsWith(Facebook))
  19.             {
  20.                 // Get Id
  21.                 return Convert.ToInt32(identity.Claims.First(c => c.ClaimType == NameIdentifierClaimType).Value);
  22.             }
  23.         }
  24.         
  25.         throw new Exception("Error, you don't use a federation with Facebook provider");
  26.     }
  27. }

 

Bien entendu n’oubliez pas de référencer l’assembly Microsoft.IdentityModel afin de pouvoir accéder à ces informations ! Après cela vous pouvez facilement l’utiliser dans vos applications, comme par exemple ci dessous, avec un peu de Razor


  1. @using WindowsAzure.AccessControlService.Extensions
  2. @if(Request.IsAuthenticated) {
  3.     <img src="https://graph.facebook.com/@HttpContext.Current.User.GetFacebookId()/picture"/>
  4.     <text>Welcome <strong>@User.Identity.Name</strong>!
  5.     [ @Html.ActionLink("Log Off", "LogOff", "Account") ]</text>
  6. }
  7. else {
  8.     @:[ @Html.ActionLink("Log On", "LogOn", "Account") ]
  9. }

 

Cela vous donnera un rendu de ce type :

image

Remonter

Configurer Access Control Service pour utiliser une authentification Facebook

NOVE4

Suite aux articles précédents sur l’installation du Windows Identity Runtime, et sur la mise en place de l’authentification via Windows Live et Access Control Services dans vos applications ASP.Net MVC, j’ai décidé de vous présenter comment on y intègre Facebook, car de nos jours il est de plus en plus commun de pouvoir se connecter avec son compte Facebook au lieu de devoir créer un énième compte avec un énième mot de passe à oublier !

 

Pour cela, je vais partir sur la démonstration que j’ai fait précédemment, on gardera donc la même configuration que pour Windows Live, nous allons juste rajouter un fournisseur d’identité de type Facebook.

Pour commencer, nous allons créer une application sur Facebook, il vous pour cela aller à cette adresse : https://developers.facebook.com/apps 

On va ensuite créer une nouvelle application :

 

image

 

Maintenant, il vous suffit de configurer votre application sur Facebook, comme ci-dessous

image

 

Il vous faut donc remplir l’App Domain avec l’url de votre namespace créé précédent sur Access Control Service, ainsi que l’url d’authentification pour le site.

Garder aussi précieusement l’App Id et l’App Secret dans un coin, car vous allez en avoir besoin très rapidement.

 

Maintenant retour à Active Control Service, ou vous allez ajouter un nouveau fournisseur d’identité, vous pouvez faire cela dans Access Management Control, puis Identity Providers, ensuite Add, et vous trouverez Facebook très rapidement je pense.

Par la suite, il suffit de remplir les champs comme ci dessous :

image

 

Alors la partie la plus importante, après les informations sur l’application sont les différentes permissions Facebook que l’on va demander à l’utilisateur, ici que l’email, ce n’est qu’une démonstration, mais vous pouvez retrouver les différentes permissions possibles ici. Si je n’ai qu’un conseil à vous donner, ces permissions valent de l’or pour récupérer des informations à propos des personnes qui se connecte à votre site.

 

Ensuite, vu qu’on a éditer notre application, nous allons aller dans l’onglet Rule groups afin d’ajouter les différents Claims que l’on souhaite récupérer, vous faites Generate, et vous sélectionner Facebook afin d’obtenir ceci :

image

 

Et voilà vous pouvez relancer votre projet de démonstration que vous avez fait la dernière fois, si vous avez suivi le tuto au pas à pas, et là vous verrez lors du lancement de l’application ceci :

 

image

 

De plus, par rapport à Windows Live qui est très fermé, Facebook est connu pour son partage, donc vous pouvez retrouver par exemple le nom de la personne connecté sur votre site comme d’habitude, c’est à dire avec un simple HttpContext.User.Identity.Name, mais aussi l’email sans problème dans ce même objet.

A noter que les modifications au niveau de l’ACS peuvent mettre actuellement un peu de temps à s’appliquer, il est donc possible que vous n’ayez pas accès à votre application de suite.

Remonter