Tutoriel : Contrôle de l’accès au service de données OGDI avec Windows Azure AppFabric – 4ième partie

A ce stade du tutoriel, il nous reste à créer un rapide client de test pour mettre en œuvre un cas d’utilisation de bout en bout.

Ce client de test va réaliser deux actions très simples : demander, dans un premier temps, un jeton SWT à ACS puis, dans un second temps, envoyer une requête au service de données OGDI en y injectant le jeton reçu depuis ACS.

Pour cela, nous allons créer une application Console dans Visual Studio 2010. Lancez Visual Studio 2010, puis cliquez sur New project depuis la Start Page, puis choisissez Console Application (dans la catégorie Windows), cliquez sur le bouton OK :

image

Tout d’abord, commencez par rajouter une classe OAuth2TokenResponse au projet avec le code suivant (vous aurez besoin de rajouter une référence à la bibliothèque System.Runtime.Serialization) :

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Runtime.Serialization;

 

namespace ConsoleApplication3

{

    [DataContract]

    class OAuth2TokenResponse

    {

        [DataMember]

        public string access_token;

    }

}

Ensuite, retournez dans votre classe Programet rajoutez la méthode suivante qui permet de demander un jeton de sécurité SWT à ACS. (Pensez à adapter cet exemple de code à votre service ACS, notamment au niveau de la constitution de l’URL d’accès puis de la valeur du champ scope de la collection de clé/valeur). Comme vous pouvez le constater et comme indiqué précédemment, nous nous authentifions ici auprès d’ACS via le protocole OAuth2 :

private static string GetTokenFromACS()

{

    //login et mot de passe attendus par ACS

    string oauthUserName = "acssample";

    string oauthPassword = "pass@word1";

 

    WebClient client = new WebClient();

    //consitution de l'URL d'accès à ACS via https

    client.BaseAddress = string.Format(

        CultureInfo.InvariantCulture, "https://{0}.{1}",

                       "ogdiaccesscontrol",

                       "accesscontrol.windows.net");

 

    NameValueCollection values = new NameValueCollection();

    values.Add("grant_type", "client_credentials");

    values.Add("client_id", oauthUserName);

    values.Add("client_secret", oauthPassword);

    values.Add("scope", "https://ogdidataservice2908.cloudapp.net/");

 

    byte[] responseBytes = client.UploadValues("/v2/OAuth2-13", "POST", values);

 

    // Extraction du jeton d'accès.

    using (MemoryStream responseStream = new MemoryStream(responseBytes))

    {

        OAuth2TokenResponse tokenResponse =

            (OAuth2TokenResponse) new DataContractJsonSerializer(typeof(OAuth2TokenResponse)).ReadObject(responseStream);

        return tokenResponse.access_token;

    }

}

Nous allons maintenant rajouter la deuxième méthode qui elle va envoyer une requête au service de données OGDI en injectant dans la requête le jeton de sécurité passé en paramètre (pensez à remplacer les URL par celle de votre service de données) :

private static string SendMessageToService(string token)

{

    WebClient client = new WebClient();

    client.BaseAddress = "https://ogdidataservice2908.cloudapp.net/";

 

    //injection du jeton

    string headerValue = string.Format("OAuth2 access_token=\"{0}\"", token);

    client.Headers.Add("Authorization", headerValue);

 

    //requête à la racine du service

    string serviceResponse = client.DownloadString(new Uri("https://ogdidataservice2908.cloudapp.net/v1/"));

 

    return serviceResponse;

}

Enfin, il n’y a plus qu’à appeler ces méthodes dans le Main, comme à l’ancienne :-) :

static void Main(string[] args)

{

    string token = GetTokenFromACS();

 

    string serviceResponse = SendMessageToService(token);

 

    Console.WriteLine("Réponse du service OGDI:\n{0}", serviceResponse);

    Console.ReadLine();

}

Lors de l’exécution de l’application, vous obtenez le résultat suivant (à noter que bien sûr les données reçues varieront d’un service de données à l’autre) :

image

Nous avons vu au long de ce tutoriel comment intégrer un service de contrôle d’accès, en l’occurrence celui proposé par le contrôle d’accès de la plateforme Windows Azure AppFabric, au service de données OGDI.

Nous avons ensuite vu comment développer un client pour demander un jeton à ACS puis requêter le service de données OGDI avec ce jeton de sécurité.

Vous disposez donc, dans ce cadre, d’une solution d’ouverture de vos données mais en restreignant l’accès seulement aux utilisateurs et entités connaissant le login et le mot de passe pour s’identifier auprès de votre service ACS. Le code source de l’ensemble du tutoriel est joint à ce billet .

Source.zip