Cette documentation est archivée et n’est pas conservée.

Utilisation du service de gestion ACS pour configurer des certificats et des clés

Publication: avril 2011

Mis à jour: juin 2015

S'applique à: Azure

  • Microsoft Azure Active Directory Access Control (également appelé Access Control Service ou ACS)

Vous pouvez configurer des certificats et des clés ACS à l'aide du portail de gestion ACS ou du service de gestion ACS. L'utilisation du service de gestion ACS peut être plus efficace si vous créez une interface utilisateur personnalisée pour gérer ACS ou si vous voulez automatiser l'intégration d'un nouveau locataire pour des solutions SaaS (Software as a Service) mutualisées.

Pour plus d'informations sur l'utilisation du portail de gestion ACS pour configurer des certificats et des clés, consultez Certificats et clés.

ImportantImportant
Avant d'effectuer les étapes suivantes, assurez-vous que votre système répond aux exigences de configuration de la plateforme et de .NET Framework indiquées dans Configuration requise pour ACS.

Pour configurer des certificats et des clés à l'aide du service de gestion ACS, procédez comme suit :

  • Étape 1 – Recueillir les informations de configuration ACS

  • Étape 2 – Créer un exemple d'application console

  • Étape 3 – Ajouter des références aux services et assemblys requis

  • Étape 4 – Implémenter le client du service de gestion

  • Étape 5 - Installer les certificats et les clés

    • Ajout d'un certificat de signature de jeton pour votre espace de noms de contrôle d'accès

    • Ajout d'un certificat de signature de jeton pour une application par partie de confiance

    • Ajout d'une clé symétrique de signature de jeton pour votre espace de noms de contrôle d'accès

    • Ajout d'une clé symétrique de signature de jeton pour une application par partie de confiance

    • Ajout d'un certificat de chiffrement de jeton

    • Ajout d'un certificat de déchiffrement de jeton

Vous pouvez utiliser le portail de gestion ACS pour recueillir les informations de configuration nécessaires. Pour plus d'informations, consultez Portail de gestion ACS.

  1. Accédez au Portail de gestion Microsoft Azure (https://manage.WindowsAzure.com), ouvrez une session, puis cliquez sur Active Directory. (Conseil de dépannage : « Active Directory » est manquant ou non disponible)

  2. Pour gérer un espace de noms Access Control, sélectionnez l'espace de noms, puis cliquez sur Gérer. (Ou cliquez sur Espaces de noms Access Control, sélectionnez l'espace de noms, puis cliquez sur Gérer.)

  3. Cliquez sur Service de gestion, sur ManagementClient, puis sur Mot de passe.

  4. Copiez la valeur dans le champ Mot de passe.

  5. Cliquez sur Service de gestion. Obtenez la valeur de votre espace de noms de service et le nom d'hôte ACS. Si l'URL de votre Service de gestion est http://contoso.accesscontrol.windows.net, l'espace de noms est contoso et le nom d'hôte est accesscontrol.windows.net.

Lors de cette étape, vous allez créer un exemple d'application console qui peut exécuter le code pour ajouter vos règles et groupes de règles ACS.

  1. Ouvrez Visual Studio 2012 et créez un projet d'application console sous le modèle Windows installé.

  2. Ajoutez le code suivant à la classe Program et attribuez les variables serviceIdentityPasswordForManagement, serviceNamespace et acsHostName aux informations de configuration appropriées que vous avez recueillies à l'étape précédente.

    public const string serviceIdentityUsernameForManagement = "ManagementClient";
    public const string serviceIdentityPasswordForManagement = "My Password/Key for ManagementClient";
    public const string serviceNamespace = "MyNameSpaceNoDots";
    public const string acsHostName = "accesscontrol.windows.net";
    public const string acsManagementServicesRelativeUrl = "v2/mgmt/service/";
    static string cachedSwtToken;
    
    

Lors de cette étape, vous allez identifier et ajouter les dépendances nécessaires aux services et aux assemblys.

  1. Cliquez avec le bouton droit sur Références, cliquez sur Ajouter une référence et ajoutez une référence à System.Web.Extensions.

    noteRemarque
    Il se peut que vous deviez cliquer avec le bouton droit sur le nom de votre exemple d'application console dans l'Explorateur de solutions, sélectionner Propriétés et changer le framework cible de votre exemple d'application de .NET Framework 4 Client Profile (attribué par défaut quand vous créez une application console) en .NET Framework 4.

  2. Cliquez avec le bouton droit sur Références du service, cliquez sur Ajouter une référence de service, puis 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, où MyConsoleApplication est le nom de votre application console et MyServiceReference est le nom de votre référence de service :

    using System;
    using System.IO;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    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.Security.Cryptography;
    using System.Security.Cryptography.X509Certificates; 
    using MyConsoleApplication.MyServiceReference;
    
    

Lors de cette étape, vous allez 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. Ajoutez la méthode GetTokenWithWritePermission et ses méthodes d'assistance à la classe Program. GetTokenWithWritePermission et ses méthodes d'assistance ajoutent le jeton SWT OAuth à 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;
    
            }
    
    
    

Dans cet exemple, vous créez un certificat de signature X.509 pour votre espace de noms Access Control.

  1. Initialisez le client du service de gestion en ajoutant le code suivant à la méthode Main de la classe Program :

    ManagementService svc = CreateManagementServiceClient();
    
    
  2. Créez une fonction d'assistance ReadBytesFromPfxFile pour lire les octets à partir de votre certificat X.509 en ajoutant le code suivant à la classe Program :

    //Helper function to read bytes from your .pfx file
    
            public static byte[] ReadBytesFromPfxFile(string pfxFileName, string protectionPassword)
            {
                byte[] signingCertificate;
                using (FileStream stream = File.OpenRead(pfxFileName))
                {
                    using (BinaryReader br = new BinaryReader(stream))
                    {
                        signingCertificate = br.ReadBytes((int)stream.Length);
                    }
                }
                return signingCertificate;
            }
    
    
  3. Pour ajouter un certificat X.509 de signature de jeton, ajoutez le code suivant à la méthode Main de la classe Program :

    noteRemarque
    Remplacez « Chemin d'accès complet de votre fichier .PFX » par le chemin d'accès complet valide de votre certificat X.509. Par exemple, « C:\ ACS2ClientCertificate.pfx ».

    Remplacez « MyCertificatePassword » par le mot de passe de votre certificat X.509.

    X509Certificate2 cert = new X509Certificate2(@"Full path to your .PFX file", “MyCertificatePassword”);
                
                DateTime startDate, endDate;
                startDate = cert.NotBefore.ToUniversalTime();
                endDate = cert.NotAfter.ToUniversalTime();
               string pfxFileName = @"Full path to your .PFX file";
                string pfxPassword = @"MyCertificatePassword";
                
    byte[] signingCertificate = ReadBytesFromPfxFile(pfxFileName, pfxPassword);
    
    ServiceKey serviceKey = new ServiceKey()
                {
                    Type = "X509Certificate",
                    Usage = "Signing",
                    Value = signingCertificate,
                      Password = Encoding.UTF8.GetBytes("MyCertificatePassword"),
                      IsPrimary = false,
                    StartDate = startDate.ToUniversalTime(),
                    EndDate = endDate.ToUniversalTime()
                };
                svc.AddToServiceKeys(serviceKey);
                svc.SaveChanges(SaveChangesOptions.Batch);
    
    

Dans cet exemple, vous créez un certificat de signature X.509 qui est affecté à une application par partie de confiance particulière.

  1. Initialisez le client du service de gestion en ajoutant le code suivant à la méthode Main de la classe Program :

    ManagementService svc = CreateManagementServiceClient();
    
    
  2. Créez une fonction d'assistance ReadBytesFromPfxFile pour lire les octets à partir du certificat X.509 en ajoutant le code suivant à la classe Program :

    //Helper function to read bytes from your .pfx file
    
            public static byte[] ReadBytesFromPfxFile(string pfxFileName, string protectionPassword)
            {
                byte[] signingCertificate;
                using (FileStream stream = File.OpenRead(pfxFileName))
                {
                    using (BinaryReader br = new BinaryReader(stream))
                    {
                        signingCertificate = br.ReadBytes((int)stream.Length);
                    }
                }
                return signingCertificate;
            }
    
    
  3. Pour ajouter un certificat X.509 de signature de jeton, ajoutez le code suivant à la méthode Main de la classe Program :

    noteRemarque
    Remplacez « Chemin d'accès complet de votre fichier .PFX » par le chemin d'accès complet de votre certificat X.509. Par exemple, « C:\ ACS2ClientCertificate.pfx ».

    Remplacez « MyCertificatePassword » par le mot de passe de votre certificat X.509.

    Remplacez « MyRelyingPartyApplication » par le nom de l'application par partie de confiance.

    //Select an existing Relying Party Application by its name
    
                RelyingParty relyingParty = svc.RelyingParties.Where(m => m.Name == "MyRelyingPartyApplication").Single();
             
               // Add a signing certificate
    
               X509Certificate2 cert = new X509Certificate2(@"Full path to your .PFX file", "MyCertificatePassword");
               DateTime startDate, endDate;
               startDate = cert.NotBefore.ToUniversalTime();
               endDate = cert.NotAfter.ToUniversalTime();
    
               string pfxFileName = @"Full path to your .PFX file";
               string pfxPassword = "MyCertificatePassword";
    
                byte[] signingCertificate = ReadBytesFromPfxFile(pfxFileName, pfxPassword);
    
               RelyingPartyKey relyingPartyKey = new RelyingPartyKey()
                {
                    StartDate = startDate.ToUniversalTime(),
                   EndDate = endDate.ToUniversalTime(),
                    Type = "X509Certificate",
                    Usage = "Signing",
                    IsPrimary = true,
                    Value = signingCertificate,
                   Password = Encoding.UTF8.GetBytes("MyCertificatePassword")
                };
    
    // Add the new signing certificate to the selected Relying Party Application
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyKeys", relyingPartyKey);
    
    
            
                //Save your relying party application
    
                svc.SaveChanges(SaveChangesOptions.Batch);
    
    

Dans cet exemple, vous affectez cette clé de signature symétrique à votre espace de noms Access Control.

  1. Initialisez le client du service de gestion en ajoutant le code suivant à la méthode Main de la classe Program :

    ManagementService svc = CreateManagementServiceClient();
    
    
  2. Pour ajouter une clé symétrique de signature de jeton, ajoutez le code suivant à la méthode Main de la classe Program :

           string symKey = "SampleTokenSigningSymmetricKey";
                DateTime startDate, endDate;
                startDate = DateTime.UtcNow;
                endDate = DateTime.MaxValue;
    
                ServiceKey serviceKey = new ServiceKey()
                {
                    
                    Type = "Symmetric",
                    Usage = "Signing",
                    Value = Encoding.UTF8.GetBytes(symKey),
                    StartDate = startDate.ToUniversalTime(),
                    EndDate = endDate.ToUniversalTime()
                };
                svc.AddToServiceKeys(serviceKey);
                svc.SaveChanges(SaveChangesOptions.Batch);
    
    

Dans cet exemple, vous affectez votre nouvelle clé symétrique de signature à une application par partie de confiance particulière.

  1. Initialisez le client du service de gestion en ajoutant le code suivant à la méthode Main de la classe Program :

    ManagementService svc = CreateManagementServiceClient();
    
    
  2. Pour ajouter une clé symétrique de signature de jeton, ajoutez le code suivant à la méthode Main de la classe Program :

          //Select a relying party application
    
                RelyingParty relyingParty = svc.RelyingParties.Where(m => m.Name == "MyRelyingPartyApplication").Single();
             
               // Create a symmetric key
    
                string symKey = "SampleTokenSigningSymmetricKey";
                DateTime startDate, endDate;
                startDate = DateTime.UtcNow;
                endDate = DateTime.MaxValue;
    
                RelyingPartyKey relyingPartyKey = new RelyingPartyKey()
                {
    
                    Type = "Symmetric",
                    Usage = "Signing",
                    Value = Encoding.UTF8.GetBytes(symKey),
                    StartDate = startDate.ToUniversalTime(),
                    EndDate = endDate.ToUniversalTime()
                };
             
                //Assign this symmetric key to the selected relying party application 
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyKeys", relyingPartyKey);
    
                   //Save your symmetric key
    
                svc.SaveChanges(SaveChangesOptions.Batch);        
    
    

Dans cet exemple, vous ajoutez un certificat de chiffrement de jeton X.509 pour une application par partie de confiance particulière.

  1. Initialisez le client du service de gestion en ajoutant le code suivant à la méthode Main de la classe Program :

    ManagementService svc = CreateManagementServiceClient();
    
    
  2. Pour ajouter un certificat X.509 de chiffrement de jeton, ajoutez le code suivant à la méthode Main de la classe Program :

    noteRemarque
    Remplacez « Chemin d'accès complet de votre fichier .CER » par le chemin d'accès complet d'un certificat X.509. Par exemple, « C:\ ACS2ClientCertificate.cer ».

    Remplacez « MyCertificatePassword » par le mot de passe du certificat X.509.

    Remplacez « MyRelyingPartyApplication » par le nom d'une application par partie de confiance.

    //Select a relying party application
    
                RelyingParty relyingParty = svc.RelyingParties.Where(m => m.Name == "MyRelyingPartyApplication").Single();
             
               // Add an encryption certificate
    
                X509Certificate2 cert = new X509Certificate2(@"Full path to your .CER file");
                DateTime startDate, endDate; 
                  startDate = cert.NotBefore;
                  endDate = cert.NotAfter;
    
                RelyingPartyKey relyingPartyKey = new RelyingPartyKey()
                {
                    Type = "X509Certificate",
                    Usage = "Encrypting",
                    Value = cert.GetRawCertData(),
                    StartDate = startDate.ToUniversalTime(),
                    EndDate = endDate.ToUniversalTime()
                };
             
                //Assign this encryption certificate to the selected relying party application 
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyKeys", relyingPartyKey);
    
                   //Save your encryption certificate
    
                svc.SaveChanges(SaveChangesOptions.Batch);     
    
    

Dans cet exemple, vous ajoutez un certificat de déchiffrement de jeton X.509 affecté à votre espace de noms Access Control.

  1. Initialisez le client du service de gestion en ajoutant le code suivant à la méthode Main de la classe Program :

    ManagementService svc = CreateManagementServiceClient();
    
    
  2. Créez une fonction d'assistance ReadBytesFromPfxFile pour lire les octets à partir du certificat X.509 en ajoutant le code suivant à la classe Program :

    //Helper function to read bytes from your .pfx file
    
            public static byte[] ReadBytesFromPfxFile(string pfxFileName, string protectionPassword)
            {
                byte[] decryptionCertificate;
                using (FileStream stream = File.OpenRead(pfxFileName))
                {
                    using (BinaryReader br = new BinaryReader(stream))
                    {
                        decryptionCertificate = br.ReadBytes((int)stream.Length);
                    }
                }
                return decryptingCertificate;
            }
    
    
  3. Pour ajouter un certificat X.509 de signature de jeton, ajoutez le code suivant à la méthode Main de la classe Program :

    noteRemarque
    Remplacez « Full path to your .PFX file » dans le code ci-dessous par le chemin d'accès complet valide à votre certificat X.509. Par exemple, si un certificat nommé ACS2ClientCertificate.pfx est enregistré sous C:\, la valeur correcte est « C:\ ACS2ClientCertificate.pfx ».

    Remplacez « MyCertificatePassword » dans le code ci-dessous par le mot de passe correct de votre certificat X.509.

    X509Certificate2 cert = new X509Certificate2(@"Full path to your .PFX file", “MyCertificatePassword”);
                
                DateTime startDate, endDate;
                startDate = cert.NotBefore.ToUniversalTime();
                endDate = cert.NotAfter.ToUniversalTime();
               string pfxFileName = @"Full path to your .PFX file";
                string pfxPassword = @"MyCertificatePassword";
                
    byte[] decryptionCertificate = ReadBytesFromPfxFile(pfxFileName, pfxPassword);
    
    ServiceKey serviceKey = new ServiceKey()
                {
                    Type = "X509Certificate",
                    Usage = "Encrypting",
                    Value = decryptionCertificate,
                      Password = Encoding.UTF8.GetBytes("MyCertificatePassword"),
                    StartDate = startDate.ToUniversalTime(),
                    EndDate = endDate.ToUniversalTime()
                };
                svc.AddToServiceKeys(serviceKey);
                svc.SaveChanges(SaveChangesOptions.Batch);
    
    

Voir aussi

Afficher: