Lorsqu'on utilise Live ID comme Identity Provider sur ACS, le seul Claim renvoyé par Live ID est un hash de l'UID du compte Live utilisé. Les informations telles que l'adresse email, le nom ou le prénom ne sont pas renvoyées.

Pour retrouver ces informations, la plupart des sites internet utilisant Live ID propose un formulaire d'enregistrement où l'utilisateur authentifié pourra renseigner ses informations (au moins son email). Au delà du fait qu'on oblige l'utilisateur à renseigner des informations qu'il a déjà renseignées à la création de son compte Live, cette solution n'est pas fiable puisqu'on ne peut pas vérifier que l'email renseigné correspond à l'email avec lequel l'utilisateur s'est logué, à moins d'envoyer un email à cette adresse contenant une URL de validation d'inscription… mais là le processus d'inscription devient infernal pour l'utilisateur.

Le SDK Live permet d'accéder aux informations du compte Live ID de l'utilisateur logué, en utilisant le même principe de consentement que Facebook et GMail.

Le principe est simple. Notre application va être enregistrée auprès de Live ID. Lorsqu'on va demander les informations utilisateur, le SDK Live va vérifier les droits de notre application sur le compte Live ID. Si aucun droit n'existe, le SDK va demander à l'utilisateur s'il accepte d'autoriser l'accès aux informations de son compte (emails, contacts, calendriers, etc. selon ce que l'application a demandé). En fonction du choix de l'utilisateur, on pourra accéder ou non à ses informations.

Enregistrement de l'application

Il faut dans un premier temps enregistrer l'application sur https://manage.dev.live.com/ en cliquant sur Create Application. Il est nécessaire de renseigner un nom d'application (utilisé pour indiquer à l'utilisateur quelle est l'application qui souhaite accéder à ses informations) et de choisir une langue (utilisée pour afficher un message localisé à l'utilisateur).

Application name

L'application est alors référencée par Live ID.

Application informations

Dans l'onglet API Settings de la page de configuration, on renseigne le domaine qui sera utilisé par Live ID pour effectuer une redirection (sans cette information, le SDK Interactive Live n'acceptera pas de renvoyer les informations).

Application settings

Une fois l'enregistrement terminé, on va pouvoir depuis l'application envoyer une requête au SDK Live pour récupérer les informations nécessaires.

Il est possible de requêter ces informations de deux manières différentes: JavaScript ou REST.

Accès aux informations en JavaScript

Le SDK Live met à disposition un fichier JS contenant un ensemble de fonctions permettant d'interagir en JavaScript avec l'API.

<script type="text/javascript" src="https://js.live.net/v5.0/wl.js" ></script>

L'objet WL va nous permettre de récupérer les informations utilisateur. La première étape consiste à initialiser le contexte en fournissant le client Id de l'application (disponible au moment de l'enregistrement) ainsi que l'URL de l'application (aucune redirection ne sera effectuée).

WL.init({ client_id: ‘000000004807A356',
        redirect_uri: 'https://acsdemo.contoso.com/MvcApplication' });

Le contexte étant initialisé, on va pouvoir authentifier l'utilisateur auprès du SDK en spécifiant un scope. Ce scope correspond aux données que l'on souhaite récupérer dans l'application (email, contacts, calendriers, etc.).

WL.login({ "scope": "wl.basic" },
         function (response)
         {
             if (response.status == "connected")
             { 
                // utilisateur connecté
             }
         });

Etant donné que l'utilisateur aura déjà fourni ses credentials Live ID via ACS, il ne sera pas redirigé vers la page d'authentification Live.

A la place de cette page, une fenêtre de consentement va être affichée demandant à l'utilisateur s'il accepte de fournir ses informations (en fonction du scope demandé) à notre application. Si la demande de consentement a déjà été validée (lors d'une visite précédente), une fenêtre va demander à l'utilisateur de retaper son mot de passe.

Demande de consentement

Première connexion au site : Demande de consentement

![Resaisie du mot de passe](https://farm9.staticflickr.com/8065/821031801515c4995aa1o.png =318x 301 "Resaisie du mot de passe")

Connexions suivantes (le consentement a déjà été effectué) : Retaper son mot de passe

L'utilisateur est maintenant authentifié et a autorisé notre application à accéder à des informations.

Il reste à demander au SDK de nous renvoyer les informations.

WL.api("/me", "GET",
       function (response)
       {
           // récupération des données effectuées
       });

Les informations au format JSON sont disponibles via la variable response. Ci-dessous un exemple de réponse :

{
    "id": "xxxxxx",
    "name": "Sebastien Ollivier",
    "first_name": "Sebastien",
    "last_name": "Ollivier",
    "link": "http://profile.live.com/cid-xxxx/",
    "gender": null,
    "emails": {
        "preferred": "sebastien.ollivier@hotmail.com",
        "account": "sebastien.ollivier@hotmail.com",
        "personal": null,
        "business": null
    },
    "locale": "fr_FR",
    "updated_time": "2012-01-24T16:03:02+0000"
}

Accès aux informations en REST

La deuxième manière de requêter les informations utilisateur est d'utiliser REST (contrairement au JavaScript, il y aura nécessairement une redirection).

Avant de pouvoir demander les informations utilisateur, il va falloir récupérer un access token valide. Pour cela, on va utiliser Live Connect et effectuer une redirection vers l'URL suivante : https://oauth.live.com/authorize?clientid=xxx&scope=wl.basic&response_type=token&redirect_uri=xxx_

De la même manière qu'en JavaScript, il faut renseigner le client Id de l'application, le scope souhaité ainsi que l'URL de l'application (utilisée pour effectuer la redirection).

Après que l'utilisateur ait validé la demande de consentement ou retapé son mot de passe, une redirection sera effectuée vers notre application en fournissant le token dans l'URL, de la manière suivante: https://acsdemo.contoso.com/MvcApplication/LiveId/#access_token=EwAwAq1DB[…]

Ce token doit ensuite être utilisé pour appeler l'API Live de la manière suivante : https://apis.live.net/v5.0/me?access_token=<access_token>

Les informations sont renvoyées au format JSON, comme via le requêtage JavaScript.

Pour plus d'informations sur le SDK Interactive Live, http://isdk.dev.live.com/.

La liste des droits des applications liés à un compte est disponible sur https://consent.live.com/.

Liste des droits des applications

Claims des Identity Providers

Pour information, voici les claims renvoyés par les principaux Identity Providers:

LiveID

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier

Google

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name

Yahoo

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name

Facebook

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/nameidentifier

http://schemas.microsoft.com/ws/2008/06/identity/claims/expiration

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress

http://schemas.xmlsoap.org/ws/2005/05/identity/claims/name

http://www.facebook.com/claims/AccessToken


En plus de ces claims, ACS renvoie un claim représentant le provider utilisé :

http://schemas.microsoft.com/accesscontrolservice/2010/07/claims/identityprovider

Si cet article t'a plu, n'hésites pas à partager , et si tu as des questions / remarques, n'hésites pas à me contacter