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

Access Control Service : Supprimer un provider d’authentification pour votre application

JANV14

On a vu précédemment comment ajouter un provider Facebook à une application en se connectant via Access Control Service.

Et maintenant question bête, comment supprime-t-on un provider d’identité ? Et bien, on est chanceux, c’est aussi simple que d’en ajouter un !

 

Pour cela, il suffit d’aller sur l’interface pour gérer votre Access Control Service, puis dans Relying Party applications, ensuite de modifier votre application.

En dessous des paramétrages, vous pouvez retrouver cette partie :

image

 

Il vous suffit de décocher les providers d’identité que vous voulez sauvegarder, et de sauvegarder. Je ne serais que trop vous conseiller de nettoyer aussi les règles de groupe associées afin d’avoir une application nickel.

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

Configurer Access Control Service pour utiliser une authentification Windows Live

OCTO25

Dans cet article, nous allons voir comment utiliser Access Control Service dans vos applications, afin d’utiliser un provider d’identité tierce à celui que vous auriez pu développer au sein de votre application.

 

Commençons donc par créer notre accès sur le portail Windows Azure, je suppose que vous avez tous un compte !

Sur le portail vous allez vous rendre dans la catégorie Service Bus, Access Control & Caching, et ensuite créer un nouveau namespace (il est activé au bout d’environ 5min)

image

 

Par la suite, vous allez le configurer, via le bouton Access Control Service, ensuite Relying Party, vous pouvez le configurer comme vous le souhaitez, à noter qu’il est possible d’utiliser des url en localhost comme ci dessous pour tester, c’est tout de suite plus facile que de déployer dans un environnement de test accessible via le Web.

 

image

 

Pour le reste, je vais uniquement décider de me connecter avec le provider Windows Live pour le moment, je ferais des articles pour se connecter avec Facebook, voir avec un Active Directory si j’arrive à en configurer correctement … Oui je ne suis pas IT !

 

Après la sauvegarde on a donc ceci :

image

 

Ensuite, dans Rule Group, vous allez éditer les règles de connexion à votre application, pour cela il vous suffit de générer une règle pour Windows Live dans notre cas

 

image

 

Bon, maintenant que vous vous dites finie la configuration, j’espère que vous avez bien pensé à installer les différents prérequis pour utiliser Access Control Services, sinon il n’est pas trop tard, et allez voir cet article !

 

Et ensuite, place à Visual Studio, votre outil préféré qui est je doute déjà ouvert, on va donc créer une nouvelle application ASP.Net MVC 3, sans Razor pour la démonstration, mais rien ne vous empêche de l’utiliser.

 

On va commencer par configurer notre application avant de créer les pages nécessaires, pour cela effectuer un clic droit sur votre projet Web, et cliquer sur Add STS Reference. Vous aurez ensuite la fenêtre ci dessous qui va apparaitre à vous de la compléter avec l’url que vous avez précédemment fournis sur le portail Azure :

 

image

 

Ensuite vous créer votre STS existant et vous rentrez l’url que vous allez trouver sur le portail Azure, dans la configuration de votre namespace, vous avez accès à l’url de votre FederationMetadata comme on peut le voir ci dessous :

 

image

 

Maintenant que la configuration est réellement finie, on va essayer de lancer notre solution (et oui pas de code à faire !) !

Et bien entendu, comme à chaque premier essai ça ne marche pas ….

 

Voilà maintenant gestion des erreurs, comme vous utilisez .Net 4.0 sur votre Cassini, vous allez probablement tomber sur cette erreur

image

Pour contourner cette erreur il vous suffit d’ajouter dans votre Web.config (dans system.web) la ligne suivante :

<httpRuntime requestValidationMode="2.0" />

Pour récupérer des informations sur l’utilisateur connecté, et bien, je suis désolé, Windows Live protège fortement ces utilisateurs contrairement à d’autres sites, vous pouvez cependant récupérer un ID unique (qui n’est pas celui de votre compte live, via cette ligne de code) :

((IClaimsIdentity)HttpContext.User.Identity).Claims.First(n => n.ClaimType == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier").Value;

Il vous faudra référencer la libraire Microsoft.IdentityModel dans votre solution pour avoir accès à l’interface IClaimsIdentity. Je chercherais tout de même s’il y a un moyen détourner de récupérer ne serait-ce que le nom et le prénom, mais j’ai de sérieux doute …. Je demanderais tout de même ! Et ça fera le sujet d’un autre article !

 

 

Par ailleurs je ne vous fournis pas la source, puisqu’il n’y a pas de code, uniquement de la configuration mais je reste à votre disposition si vous souhaitez des informations !

PS : J’ai eu des problèmes juste après ma première configuration de namespace dans ACS, genre il était inaccessible, donc ne vous inquiétez pas si ça arrive ça reviendra !

Remonter

Préparer son poste pour développer des applications utilisant Access Control Service

OCTO24

Alors Access Control Service, en deux mots vous permets d’utiliser des identités SSO tel que Windows Live, Facebook, Yahoo, et votre Active Directory afin de vous connecter à des applications sur Azure (ou non par ailleurs)

 

Bien entendu, Visual Studio 2010 et le SDK Azure 1.5 ne suffisent pas, oui il faut toujours installer de plus en plus de choses sur vos machines de dev !

 

Donc les prérequis, il vous faut Visual Studio 2010 de n’importe quelle édition, mais je suppose que vous l’avez tous, ou alors vous êtes un robot qui passez sur mon blog. Ainsi que IIS installé, mais vous êtes comme moi et fan d’Azure, donc vous l’avez déjà !

 

Ensuite il vous faudra le Windows Identity Runtime que vous pourrez trouver ici : http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=17331

 

1ère étape trouver la bonne mise à jour à télécharger, alors les fichiers commençant par Windows 6.0 sont pour Windows Vista et Windows Server 2008, ceux commençant par Windows 6.1 sont pour Windows Seven et Windows Server 2008 R2. Je n’ai pas testé sous Windows 8, cependant je verrais plus tard s’il est possible d’utiliser la mise à jour pour Windows 6.1 (il faudra revenir pour connaître le résultat). De toute façon je rappelle que Windows 8 est en Preview Developper, et qu’il est déconseillé de l’avoir en physique sur sa machine !

 

Ensuite il faut télécharger le SDK du Windows Identity Foundation que vous pourrez trouver ici : http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=4451

 

Voilà l’article se termine là, je vous montrerais plus tard comment utiliser le Windows Identity Runtime dans vos projets, avec Windows Live, Facebook ou un Active Directory (le dernier si, et seulement si, j’arrive à configurer correctement ce dernier)

Remonter