Utilisation du service de gestion ACS pour configurer AD FS 2.0 en tant que fournisseur d'identité d'entreprise

Mise à jour : 19 juin 2015

S’applique à : Azure

S'applique à

  • Microsoft® Azure™ Access Control Service (ACS)

  • Microsoft Active Directory® Federation Services (AD FS) 2.0

Résumé

Cette rubrique explique comment ajouter le fournisseur d’identité à un espace de noms ou à une application de partie de confiance. Pour effectuer cette tâche, vous pouvez utiliser le service de gestion ACS. Le service de gestion est particulièrement utile lorsque vous créez une interface utilisateur personnalisée pour gérer ACS et lors de l’automatisation de l’ajout de nouveaux locataires pour les solutions SaaS (Software as a Service) multilocataires.

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 proxy du service de gestion

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

  • Étape 5 – Tester votre travail

Objectifs

  • Identifier les exigences et les informations de configuration.

  • Dresser la liste des étapes nécessaires.

  • Vérifier que la configuration a réussi.

Vue d’ensemble

Le service de gestion ACS est un service web qui expose les fonctionnalités ACS au code. Le service de gestion ACS peut accéder à toutes les fonctionnalités ACS, y compris le sous-ensemble de fonctionnalités disponible dans l’interface utilisateur du portail de gestion ACS.

L’ajout de Microsoft en tant que fournisseur d’identité à ACS vous permet de réutiliser l’investissement effectué dans la gestion des identités d’entreprise pour les solutions basées sur le cloud. Pour configurer en tant que fournisseur d’identité, 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 proxy du service de gestion

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

  • Étape 5 – Tester votre travail

Étape 1 – Recueillir les informations de configuration

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

  • nom d'utilisateur de l'identité du service de gestion. La valeur par défaut est ManagementClient ;

  • mot de passe de l'identité du service de gestion ;

  • Nom de l’espace de noms.

  • Nom d’hôte ACS : accesscontrol.windows.net

  • Chaîne de certificat de signature : obtenez la chaîne de certificat de signature AD FS à partir de votre déploiement.

Pour rechercher le nom d'utilisateur et le mot de passe de l'identité du service de gestion, appliquez la procédure suivante.

  1. Accédez au portail de gestion Microsoft Azure (https://manage.WindowsAzure.com), connectez-vous, puis cliquez sur Active Directory. (Conseil de résolution des problèmes : l’élément « Active Directory » est manquant ou non disponible) 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.)

  2. Cliquez sur Service de gestion, puis sélectionnez un service de gestion, tel que ManagementClient.

  3. La valeur du champ Nom est le Nom d'utilisateur de l'identité du service de gestion.

  4. Dans la section Informations d'identification, cliquez sur Mot de passe. La valeur du champ de mot de passe est le Mot de passe de l'identité du service de gestion.

Après avoir collecté les informations requises, procédez comme suit pour créer un exemple d’application console qui exécutera le code à ajouter en tant que fournisseur d’identité :

  1. Démarrez Visual Studio et créez un projet d’application console.

  2. Dans la classe Programme, assignez les valeurs d'informations de configuration à des variables avec l'étendue de module. L'exemple de code suivant montre comment procéder.

    static string serviceIdentityUsernameForManagement = "ManagementClient";
    static string serviceIdentityPasswordForManagement = "ManagementClientPasswordValue";
    
    static string serviceNamespace = "MyNameSpaceNoDots";
    static string acsHostName = "accesscontrol.windows.net";
    
    static string signingCertificate = "Very long string representing ADFS signing certificate";
    
    static string cachedSwtToken;
    static string identityProviderName = "My Other ADFS Identity Provider";
    

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

Étape 3 – Implémenter le proxy du service de gestion

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

Pour implémenter le proxy du service de gestion

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

    public static ManagementService CreateManagementServiceClient()
            {
                string managementServiceHead = "v2/mgmt/service/";
                string managementServiceEndpoint = 
    string.Format("https://{0}.{1}/{2}", 
    serviceNamespace, 
    acsHostName, 
    managementServiceHead);
                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, 
     string.Format("OAuth {0}", 
     cachedSwtToken));
            }
    
            private static string GetTokenFromACS()
            {
                // request a token from ACS
                WebClient client = new WebClient();
                client.BaseAddress = string.Format("https://{0}.{1}", 
          serviceNamespace, 
          acsHostName);
    
                NameValueCollection values = new NameValueCollection();
    
                values.Add("grant_type", "password");
                values.Add("client_id", serviceIdentityUsernameForManagement);
                values.Add("username", serviceIdentityUsernameForManagement);
                values.Add("client_secret", serviceIdentityPasswordForManagement);
                values.Add("password", serviceIdentityPasswordForManagement);
    
                byte[] responseBytes = 
    client.UploadValues("/v2/OAuth2-13/rp/AccessControlManagement", 
          "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 s’ajoute en tant que fournisseur d’identité à l’aide du proxy du service de gestion que vous avez créé précédemment.

Pour ajouter AD FS 2.0 comme fournisseur d'identité

  1. Initialisez le proxy du 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é.

    IdentityProvider identityProvider = new IdentityProvider()
    {
        DisplayName = identityProviderName,
        Description = identityProviderName,
        WebSSOProtocolType = "WsFederation",
        IssuerId = issuer.Id
    };
           svc.AddObject("IdentityProviders", identityProvider);
    
  4. Créez une clé de signature du fournisseur d'identité basée sur le certificat obtenu précédemment.

    IdentityProviderKey identityProviderKey = new IdentityProviderKey()
    {
        DisplayName = "SampleIdentityProviderKeyDisplayName",
        Type = "X509Certificate",
        Usage = "Signing",
        Value = Convert.FromBase64String(signingCertificate),
        IdentityProvider = identityProvider,
        StartDate = startDate,
        EndDate = endDate,
    };
          svc.AddRelatedObject(identityProvider, 
    "IdentityProviderKeys", 
    identityProviderKey);
    
  5. Mettez à jour l'adresse de connexion du fournisseur d'identité.

    IdentityProviderAddress realm = new IdentityProviderAddress()
    {
        Address = "http://SampleIdentityProvider.com/sign-in/",
        EndpointType = "SignIn",
        IdentityProvider = identityProvider,
    };
    svc.AddRelatedObject(identityProvider, "IdentityProviderAddresses", realm);
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
  6. 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 = identityProvider.Id,
                RelyingPartyId = rp.Id
            });
        }
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    

Étape 5 – Tester votre travail

Pour tester votre travail

  1. Dans la page Access Control Service, cliquez sur le lien Groupes de règles dans la section Relations d'approbation.

  2. Cliquez sur l'une des règles disponibles.

  3. Dans la page Modifier le groupe de règles, cliquez sur Ajouter une règle.

  4. Dans la page Ajouter une règle de revendication, choisissez le fournisseur d'identité que vous venez d'ajouter dans la liste déroulante dans la section Émetteur de revendication.

  5. Conservez les autres valeurs par défaut.

  6. Cliquez sur Enregistrer.

Vous venez de créer une règle directe (pass-through) pour le fournisseur d'identité.