Partager via


Guide pratique pour utiliser le service de gestion ACS pour configurer un fournisseur d’identité OpenID

Mise à jour : 19 juin 2015

S’applique à : Azure

S'applique à

  • Microsoft® Azure™ Access Control Service (ACS)

  • OpenID 2.0

Résumé

Cette rubrique décrit les étapes de base nécessaires pour ajouter des fournisseurs d'identité qui prennent en charge le protocole OpenID. Les fournisseurs d’identité OpenID peuvent être ajoutés à ACS à l’aide du service de gestion. Les fournisseurs d’identité OpenID ne peuvent pas être ajoutés à l’aide du portail de gestion ACS. Dans cette rubrique, nous faisons référence à la spécification OpenID 2.0, car il s’agit de la version de spécification prise en charge par ACS.

Contenu

  • Objectifs

  • Vue d’ensemble

  • Résumé des étapes

  • Étape 1 – Recueillir les informations de configuration

  • Étape 2 : ajouter des références aux services et assemblys requis

  • Étape 3 : implémenter le client du service de gestion

  • Étape 4 – Ajouter un fournisseur d'identité

Objectifs

  • Identifier les informations de configuration et les éléments requis.

  • Dresser la liste des étapes nécessaires pour ajouter un fournisseur d'identité OpenID.

Vue d’ensemble

Le service de gestion est un service web qui est l’un des composants clés d’ACS. Il expose une fonctionnalité accessible à l'aide de l'interface utilisateur du portail de gestion. Tout ce qui peut être fait dans le portail de gestion peut également l'être à l'aide du service de gestion. L’ajout des fournisseurs d’identité OpenID ACS vous permet d’économiser sur le développement et la gestion du mécanisme de gestion des identités de l’échelle Internet. Pour ajouter un fournisseur d'identité OpenID, vous devez écrire du code qui suit des étapes spécifiques. Cette rubrique décrit ces étapes de base.

Résumé des étapes

  • Étape 1 – Recueillir les informations de configuration

  • Étape 2 : ajouter des références aux services et assemblys requis

  • Étape 3 : implémenter le client du service de gestion

  • Étape 4 – Ajouter un fournisseur d'identité

Étape 1 – Recueillir les informations de configuration

Cette étape identifie et montre comment recueillir les informations de configuration nécessaires. Vous devez recueillir les informations suivantes :

  • Nom d'utilisateur de l'identité du service de gestionManagementClient.

  • Mot de passe de l'identité du service de gestion—Pour obtenir le mot de passe de l'identité du service pour le service de gestion :

    1. Connectez-vous au portail de gestion du service de contrôle d'accès.

    2. Dans la section Administration, cliquez sur le lien Service de gestion.

    3. Dans la page Service de gestion, cliquez sur le lien ManagementClient (ManagementClient est le nom d'utilisateur pour le service).

    4. Dans la section Informations d'identification, cliquez sur le lien Clé symétrique ou Mot de passe. Les valeurs de ces deux zones sont identiques. Il s'agit du mot de passe.

  • Espace de noms de votre service

  • Nom d'hôte ACS—Généralement accesscontrol.windows.net.

Après avoir recueilli les informations nécessaires, suivez ces étapes pour créer un exemple de console application qui exécutera le code pour ajouter un fournisseur d'identité OpenID  :

  1. Ouvrez Visual Studio® 2010 et créez un projet d'application console.

  2. Dans la classe Programme, attribuez les informations recueillies précédemment aux variables d'étendue du module, en utilisant du code semblable à celui qui suit.

        static string serviceIdentityUsernameForManagement = "ManagementClient";
        static string serviceIdentityPasswordForManagement = "...update to your password...";

        static string serviceNamespace = "...update to your namespace...";
        static string acsHostName = "accesscontrol.windows.net";
        static string acsManagementServicesRelativeUrl = "v2/mgmt/service/";

        static string identityProviderName = "My Open ID Identity Provider";

        static string cachedSwtToken;

Étape 2 : ajouter des références aux services et assemblys requis

Cette étape identifie et ajoute les dépendances nécessaires aux services et aux assemblys.

Pour ajouter les dépendances nécessaires aux services et aux assemblys

  1. Ajoutez une référence à System.Web.Extensions.

  2. Ajoutez une référence de service au service de gestion. L'URL du service de gestion est unique à votre espace de noms et ressemble à la chaîne suivante :

    https://VOTRE_ESPACE_DE_NOMS.accesscontrol.windows.net/v2/mgmt/service

  3. Ajoutez les déclarations suivantes.

    using System.Web; 
    using System.Net; 
    using System.Data.Services.Client; 
    using System.Collections.Specialized; 
    using System.Web.Script.Serialization;
    using System.Globalization;
    using System.Runtime.Serialization.Json;
    using ConsoleApplication1.ServiceReference1;
    

Notez la dernière déclaration, ConsoleApplication1.ServiceReference1. Elle peut être différente si vous avez modifié les valeurs par défaut lors de la création de votre application console ou lors de l'ajout de la référence au service de gestion.

Étape 3 : implémenter le client du service de gestion

Cette étape crée une méthode qui encapsule l'implémentation du client du service de gestion.

Pour implémenter le client du service de gestion

  1. Ajoutez la méthode suivante à la classe Program.

    public static ManagementService CreateManagementServiceClient()
            {
                string managementServiceEndpoint = String.Format(CultureInfo.InvariantCulture, "https://{0}.{1}/{2}",
                    serviceNamespace,
                    acsHostName,
                    acsManagementServicesRelativeUrl);
                ManagementService managementService = new ManagementService(new Uri(managementServiceEndpoint));
    
                managementService.SendingRequest += GetTokenWithWritePermission;
    
                return managementService;
            }
    
  2. Implémentez la méthode GetTokenWithWritePermission et ses méthodes d'assistance. Cela ajoutera le jeton OAuth SWT à l'en-tête Authorization de la requête HTTP.

    public static void GetTokenWithWritePermission(object sender, SendingRequestEventArgs args)
            {
                GetTokenWithWritePermission((HttpWebRequest)args.Request);
            }
    
            public static void GetTokenWithWritePermission(HttpWebRequest args)
            {
                if (cachedSwtToken == null)
                {
                    cachedSwtToken = GetTokenFromACS();
                }
    
                args.Headers.Add(HttpRequestHeader.Authorization, "Bearer " + cachedSwtToken);
            }
    
            private static string GetTokenFromACS()
            {
                //
                // Request a token from ACS
                //
                WebClient client = new WebClient();
                client.BaseAddress = string.Format(CultureInfo.CurrentCulture, 
                                                   "https://{0}.{1}", 
                                                   serviceNamespace, 
                                                   acsHostName);
    
                NameValueCollection values = new NameValueCollection();
                values.Add("grant_type", "client_credentials");
                values.Add("client_id", serviceIdentityUsernameForManagement);
                values.Add("client_secret", serviceIdentityPasswordForManagement);
                values.Add("scope", client.BaseAddress + acsManagementServicesRelativeUrl);
    
                byte[] responseBytes = client.UploadValues("/v2/OAuth2-13", "POST", values);
    
                string response = Encoding.UTF8.GetString(responseBytes);
    
                // Parse the JSON response and return the access token 
                JavaScriptSerializer serializer = new JavaScriptSerializer();
    
                Dictionary<string, object> decodedDictionary = serializer.DeserializeObject(response) as Dictionary<string, object>;
    
                return decodedDictionary["access_token"] as string;
    
            }
    

Étape 4 – Ajouter un fournisseur d'identité

Cette étape ajoute un fournisseur d'identité OpenID à l'aide du client de service de gestion que vous avez créé précédemment.

Pour ajouter un fournisseur d'identité OpenID

  1. Dans la méthode Main, initialisez le client de service de gestion.

    ManagementService svc = CreateManagementServiceClient();
    
  2. Ajoutez votre fournisseur d'identité comme émetteur.

                Issuer issuer = new Issuer
                {
                    Name = identityProviderName
                };
                svc.AddToIssuers(issuer);
                svc.SaveChanges(SaveChangesOptions.Batch);
    
  3. Créez un fournisseur d'identité.

                var openId = new IdentityProvider
                {
                    DisplayName = identityProviderName,
                    Description = identityProviderName,
                    WebSSOProtocolType = "OpenId",
                    IssuerId = issuer.Id
                };
    
                svc.AddObject("IdentityProviders", openId);
    
  4. Mettez à jour l'adresse de connexion du fournisseur d'identité. Dans cet exercice, vous allez utiliser www.myopenid.com comme adresse de connexion. Parmi les autres fournisseurs d'identité OpenID figurent Google et Yahoo!, qui possèdent leurs propres adresses de connexion. Ils sont https://www.google.com/accounts/o8/ud et https://open.login.yahooapis.com/openid/op/auth, respectivement.

                var openIdAddress = new IdentityProviderAddress
                {
                    Address = "https://www.myopenid.com/server",
                    EndpointType = "SignIn"
                };
    
                svc.AddRelatedObject(openId, "IdentityProviderAddresses", openIdAddress);
                svc.SaveChanges();
    
  5. Rendez le fournisseur d'identité accessible aux parties de confiance, à l'exception du service de gestion.

                foreach (RelyingParty rp in svc.RelyingParties)
                {
                    // skip the built-in management RP. 
                    if (rp.Name != "AccessControlManagement")
                    {
                        svc.AddToRelyingPartyIdentityProviders(new RelyingPartyIdentityProvider()
                        {
                            IdentityProviderId = openId.Id,
                            RelyingPartyId = rp.Id
                        });
                    }
                }
    
                svc.SaveChanges(SaveChangesOptions.Batch);