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

Procédure : utiliser le service de gestion ACS pour configurer des applications par partie de confiance

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 applications de partie de confiance ACS à l'aide du portail de gestion ACS (pour plus d'informations, consultez Applications par partie de confiance) 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.

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 applications de partie de confiance à l'aide du service de gestion ACS, procédez comme suit :

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

  1. Ouvrez le portail de gestion ACS. Pour plus d'informations sur le démarrage du portail de gestion ACS, consultez Portail de gestion ACS.

  2. Récupérez la valeur du compte de service de gestion ACS. Vous pouvez utiliser le compte par défaut ManagementClient. Pour afficher cette valeur, dans le portail de gestion ACS, cliquez sur Service de gestion sous la section Administration dans l'arborescence du côté gauche de la page.

  3. Récupérez la valeur du mot de passe du compte de service de gestion ACS. Pour afficher cette valeur, procédez comme suit :

    1. Dans le portail de gestion ACS, cliquez sur Service de gestion sous la section Administration dans l'arborescence du côté gauche de la page.

    2. Dans la page Service de gestion, cliquez sur ManagementClient sous Comptes de service de gestion.

    3. Dans la page Modifier le compte du service de gestion, sous Informations d'identification, cliquez sur Mot de passe.

    4. Dans la page Modifier les informations d'identification de gestion, copiez la valeur du champ Mot de passe.

  4. Obtenez le nom de votre espace de noms Azure. Vous pouvez obtenir cette valeur à partir du portail Azure ou à partir de l'URL de votre portail de gestion ACS. Par exemple, dans http://contoso.accesscontrol.windows.net, le nom de l'espace de noms est contoso.

  5. Récupérez le nom d'hôte ACS. Généralement, il s'agit de 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 :

    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;
    
            }
    
    
    

Lors de cette étape, vous allez créer un exemple d'application de partie de confiance avec un format de jeton SAML 2.0 (option par défaut), aucune stratégie de chiffrement de jetons (option par défaut), associée à un fournisseur d'identité Windows Live ID (compte Microsoft) (option par défaut), 600 secondes de durée de vie de jetons (option par défaut) et un certificat de signature de jetons X.509 personnalisé pour votre application de partie de confiance ou un certificat de signature de jetons pour l'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. Ajoutez votre nouvelle application de partie de confiance (vous pouvez la nommer « MyRelyingPartyApplication », comme indiqué dans le code ci-dessous) et enregistrez les modifications en ajoutant le code suivant à la méthode Main dans 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.cer est enregistré sous C:\, la valeur correcte est « C:\ ACS2ClientCertificate.cer ».

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

    
                //Create Relying Party Application
    
                RelyingParty relyingParty = new RelyingParty()
                {
                    Name = "MyRelyingPartyApplication",
                    AsymmetricTokenEncryptionRequired = false,
                    TokenType = "SAML_2_0",
                    TokenLifetime = 3600
                };
    
                svc.AddToRelyingParties(relyingParty);
    
    
                //Create the Realm Address
    
                RelyingPartyAddress realmAddress = new RelyingPartyAddress()
                {
                    Address = "http://TestRelyingParty.com/Realm",
                    EndpointType = "Realm"
                };
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", realmAddress);
    
                //Create the Return URL Address
    
                RelyingPartyAddress replyAddress = new RelyingPartyAddress()
                {
                    Address = "http://TestRelyingParty.com/Reply",
                    EndpointType = "Reply"
                };
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", replyAddress);
    
              // Create a Rule Group for This Relying Party Application
    
                RuleGroup rg = new RuleGroup();
                rg.Name = "SampleRuleGroup For " + relyingParty.Name;
                svc.AddToRuleGroups(rg);
    
                // Assign This New Rule Group to Your New Relying Party Application
    
                RelyingPartyRuleGroup relyingPartyRuleGroup = new RelyingPartyRuleGroup();
    
                svc.AddToRelyingPartyRuleGroups(relyingPartyRuleGroup);
                svc.AddLink(relyingParty, "RelyingPartyRuleGroups", relyingPartyRuleGroup);
                svc.AddLink(rg, "RelyingPartyRuleGroups", relyingPartyRuleGroup);
    
    
                //Save Your New Relying Party Application
    
                svc.SaveChanges(SaveChangesOptions.Batch);
    
    

  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. Ajoutez votre nouvelle application de partie de confiance (vous pouvez la nommer « MyRelyingPartyApplication », comme indiqué dans le code ci-dessous) et enregistrez les modifications en ajoutant le code suivant à la méthode Main dans 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.cer est enregistré sous C:\, la valeur correcte est « C:\ ACS2ClientCertificate.cer ».

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

    
                //Create Relying Party Application
    
                RelyingParty relyingParty = new RelyingParty()
                {
                    Name = "MyRelyingPartyApplication",
                    AsymmetricTokenEncryptionRequired = false,
                    TokenType = "SAML_2_0",
                    TokenLifetime = 3600
                };
    
                svc.AddToRelyingParties(relyingParty);
    
    
                //Create the Realm Address
    
                RelyingPartyAddress realmAddress = new RelyingPartyAddress()
                {
                    Address = "http://TestRelyingParty.com/Realm",
                    EndpointType = "Realm"
                };
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", realmAddress);
    
                //Create the Return URL Address
    
                RelyingPartyAddress replyAddress = new RelyingPartyAddress()
                {
                    Address = "http://TestRelyingParty.com/Reply",
                    EndpointType = "Reply"
                };
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", replyAddress);
    
                //Create 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")
                };
                svc.AddRelatedObject(relyingParty, "RelyingPartyKeys", relyingPartyKey);
    
    
              // Create a Rule Group for This Relying Party Application
    
                RuleGroup rg = new RuleGroup();
                rg.Name = "SampleRuleGroup For " + relyingParty.Name;
                svc.AddToRuleGroups(rg);
    
                // Assign This New Rule Group to Your New Relying Party Application
    
                RelyingPartyRuleGroup relyingPartyRuleGroup = new RelyingPartyRuleGroup();
    
                svc.AddToRelyingPartyRuleGroups(relyingPartyRuleGroup);
                svc.AddLink(relyingParty, "RelyingPartyRuleGroups", relyingPartyRuleGroup);
                svc.AddLink(rg, "RelyingPartyRuleGroups", relyingPartyRuleGroup);
    
    
                //Save Your New Relying Party Application
    
                svc.SaveChanges(SaveChangesOptions.Batch);
    
    

Voir aussi

Afficher: