Présentation des API REST de Windows Azure : 1ère étape, le certificat

Tags: Azure, Rest

Dès le démarrage de Windows Azure, Microsoft a proposé des API REST de management de la plateforme. Si vous êtes administrateur, l'idéal pour gérer, automatiser vos comptes Azure, les commandlets de Powershell sont très bien faites.

Mais parfois, elles ne vous suffiront pas et il vous faudra mettre les mains dans le cambouis pour satisfaire vos envies (qui doivent être tordues quand même pour ne pas être résolues par les Cmdlets ;-)).

Le but de cette série d'article est de vous montrer comment faire. Il n'est pas question pour moi d'en faire le tour complet, tout simplement parce que je n'ai certainement pas tout vu et que ces API REST sont en constantes évolutions tout comme les SDK de Windows Azure.

J'en profite pour dire que c'est un retour d'expérience d'une application que j'avais développé pour Microsoft France, c2iFreemium, qui permettait de tester Azure sans avoir de LiveId. L'application gérait un pool de projets Azure, déployait pour vous les packages, effectuait le démarrage des services hostés, créait les bases SQL Azure avec les autorisations, etc.

Bref, en un simple clic, c2iFreemium générait tout un environnement Azure pour vous de façon transparente, et ce grâce en partie aux API REST.

NB: c2iFreemium est également utilisé par d'autres filiales de Microsoft, en Roumanie, Ukraine, Russie, Italie, Pologne, Danemark, République tchèque, Slovaquie, Croatie, etc.

Le certificat

Pour toute discussion avec les API REST de management, il vous faut un certificat. Ce certificat devra être utilisé pour toute interrogation et assure la sécurité entre votre compte Azure et votre application.

Création du certificat

Il faut donc créer un certificat. ce dernier est au format X509. Il y a plusieurs façons de créer ce certificat (avec la console d'administration d'IIS, avec l'utilitaire makecert.exe), mais comme je suppose que vous êtes développeur, on va le faire avec Visual Studio 2010 et le SDK 1.6 de Windows Azure qui date du 8 Novembre 2011.

NB : Pour être certain d'avoir le dernier SDK, rendez-vous plutôt à cette adresse de MS France.

azure1Maintenant ouvrons Visual Studio et la fenêtre Server Explorer. Vous devriez voir dans l’arbre un nœud intitulé Windows Azure Compute. Un petit clic droit dessus puis :

Add deployment environment,

Une fenêtre s’ouvre. Clic droit de nouveau sur Windows Azure Subscriptions puis :

Manage,

Une fenêtre s’ouvre intitulée Windows Azure Project Management Settings. Cliquez sur le bouton New. Une nouvelle fenêtre s’ouvre qui vous permet soit d’utiliser un certificat existant, soit d’en créer un nouveau, ce que nous allons faire. Donc dans le combobox, le dernier de la liste devrait s’appeler Create. Sélectionnez le et… une nouvelle fenêtre apparait (youpi!) vous demandant un nom pour votre certificat.

azure2

C’est la 4ème fenêtre modale qui apparait ! Vous comprenez maintenant pourquoi Windows s’appelle Windows Tire la langue

Tapez donc le nom que vous voulez puis validez (je l’ai intitulé “Mon certificat”, original non ?).

Le SDK d’Azure crée alors le certificat. C’est un certificat avec une clé publique et une clé privée. C’est la clé publique que vous allez uploader dans votre compte Windows Azure.

Ou est donc cette clé publique ? C’est un fichier .cer.

Dans la fenêtre “Windows Azure Project Management Authentification”, vous avez un lien vers ce fichier :

azure3

Vous verrez qu’il est placé dans le dossier temporaire de Windows. Donc vous pouvez le récupérer facilement.

Ou est le certificat complet ? Il est installé sur votre machine. Pour voir l’ensemble des certificats de votre machine,

tapez certmgr.msc depuis une invite de commande.

La console d’administration des certificats apparait avec votre nouveau certificat :

azure4

D’ailleurs si vous voulez régénérer un fichier contenant votre clé publique, vous pouvez le faire depuis cette console :

Clic droit sur le certificat –> Toutes les tâches –> Exporter

Dans l’assistant qui apparait, sélectionner :

  • Non, ne pas exporter la clé publique,
  • Format X.509 binaire encodé DER (.cer)

Vous aurez alors votre fichier contenant la clé publique qui sera généré.

Maintenant que le certificat est crée et que vous avez accès à votre fichier .cer, il faut l’installer sur votre compte Azure. (vous pouvez fermer les 256 fenêtres précédentes Clignement d'œil).

Installation du certificat

azure5

 

 

Connectez vous au portail de gestion de Windows Azure.

Sélectionnez Services hébergés, Comptes de stockage et CDN (en bas à gauche) et ensuite sélectionnez Certificats de gestion.

Cliquez sur :

Ajouter un certificat,

Sélectionnez votre fichier .cer,

et :

THAT’S IT!

Félicitations, votre certificat de gestion de votre compte Azure est maintenant prêt à être utilisé.

 

 

Important : dans votre interface, vous voyez qu’il y a une colonne Empreinte numérique :

azure6

(elle est affichée également dans les propriétés de votre certificat dans la console certmgr.msc). Copier cette empreinte (thumbprint) dans le presse-papier, on en aura besoin plus tard.

Remarquez également que le certificat a une durée de vie portée à 1 an maintenant). Donc dans un an, ne vous étonnez pas si votre code ne fonctionne plus, c’est juste que votre certificat n’est plus valable.

Utilisation du certificat

Comme je le disais plus haut, dans tout appel des API REST de management de Windows Azure, vous devrez envoyer dans le header de votre requête votre certificat. On doit donc écrire quelques lignes de code qui nous permettrons d’accéder à nos certificats et de retrouver le notre grâce à son empreinte.

Heureusement, le .NET Framework nous fournit tout ce qu’il faut pour cela :

private const string CertificateThumbprint = "[VOTRE EMPREINTE NUMERIQUE]";
private static X509Certificate2 GetCertificate()
{
    var certificateStore = new X509Store(StoreName.My, StoreLocation.CurrentUser);
    try
    {
        certificateStore.Open(OpenFlags.ReadOnly);
        var certs = certificateStore.Certificates.Find(
            X509FindType.FindByThumbprint,
            CertificateThumbprint,
            false);

        if (certs.Count != 1)
        {
            Console.WriteLine("Certificat introuvable (CurrentUser)");
            throw new InvalidOperationException("Certificat introuvable");
        }
        return certs[0];
    }
    finally
    {
        certificateStore.Close();
    }
}

 

Remarquez que je cherche dans StoreLocation.CurrentUser (cf la capture plus haut de certmgr.msc).

Tout est prêt maintenant pour utiliser les API REST. (la suite dans un prochain numéro…).

blog comments powered by Disqus