Delen via


Procedure: ACS Management Service gebruiken om service-identiteiten te configureren

Bijgewerkt: 19 juni 2015

Van toepassing op: Azure

Van toepassing op

  • Microsoft Azure Active Directory Access Control (ook wel Access Control Service of ACS genoemd)

Overzicht

U kunt ACS-service-identiteiten configureren met behulp van de ACS-beheerportal (zie Service-identiteiten) of de ACS Management-service voor meer informatie. Het werken met de ACS Management Service kan efficiƫnter zijn als u een aangepaste gebruikersinterface bouwt voor het beheren van ACS of als u de onboarding van een nieuwe tenant voor SaaS-oplossingen (Multitenant Software as a Service) wilt automatiseren.

Stappen voor het configureren van service-identiteiten met behulp van de ACS-beheerservice

Belangrijk

Voordat u de volgende stappen uitvoert, moet u ervoor zorgen dat uw systeem voldoet aan alle vereisten van .NET Framework en platform die worden samengevat in ACS-vereisten.

Voer de volgende stappen uit om service-id's te configureren met behulp van de ACS Management Service:

  • Stap 1: ACS-configuratiegegevens verzamelen

  • Stap 2: een voorbeeldconsoletoepassing maken

  • Stap 3: Verwijzingen toevoegen aan de vereiste services en assembly's

  • Stap 4: de Management Service-client implementeren

  • Stap 5: Een service-id toevoegen

Stap 1: ACS-configuratiegegevens verzamelen

U kunt de ACS-beheerportal gebruiken om de benodigde configuratiegegevens te verzamelen. Zie acs-beheerportal voor meer informatie over het starten van de ACS-beheerportal.

ACS-configuratiegegevens verzamelen

  1. Start de ACS-beheerportal. Zie acs-beheerportal voor meer informatie over het starten van de ACS-beheerportal.

  2. Haal de waarde op van het ACS-beheerserviceaccount. U kunt het standaard ManagementClient-account gebruiken. Als u deze waarde wilt weergeven, klikt u in de ACS-beheerportal op Beheerservice onder de sectie Beheer in de structuur aan de linkerkant van de pagina.

  3. Haal de waarde op van het wachtwoord van het ACS Management Service-account. Ga als volgt te werk om deze waarde weer te geven:

    1. Klik in de ACS-beheerportal op Beheerservice onder de sectie Beheer in de structuur aan de linkerkant van de pagina.

    2. Klik op de pagina Beheerservice op ManagementClient onder Beheerserviceaccounts.

    3. Klik op de pagina Beheerserviceaccount bewerken onder Referenties op Wachtwoord.

    4. Kopieer op de pagina Beheerreferenties bewerken de waarde in het veld Wachtwoord .

  4. Haal de waarde van uw Azure-naamruimte op. U kunt deze waarde verkrijgen via de Azure Portal of via de URL van uw ACS-beheerportal. In http://contoso.accesscontrol.windows.net, bijvoorbeeld, de waarde van de Azure-naamruimte is contoso.

  5. Haal de waarde van de ACS-hostnaam op. Meestal is het accesscontrol.windows.net.

Stap 2: een voorbeeldconsoletoepassing maken

In deze stap maakt u een voorbeeldconsoletoepassing waarmee u de code kunt uitvoeren voor het toevoegen van uw ACS-service-identiteiten.

Een voorbeeldconsoletoepassing maken

  1. Open Visual Studio 2012 en maak een nieuw consoletoepassingsproject.

  2. Voeg de volgende code toe aan de klasse Program en wijs vervolgens de variabelen serviceIdentityPasswordForManagement, serviceNamespace en acsHostName toe aan de juiste configuratiegegevens die u in de bovenstaande stap hebt verzameld.

    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;
    

Stap 3: Verwijzingen toevoegen aan de vereiste services en assembly's

In deze stap identificeert en voegt u de vereiste afhankelijkheden toe aan de services en assembly's.

De vereiste afhankelijkheden toevoegen aan de services en assembly's

  1. Klik met de rechtermuisknop op Verwijzingen, klik op Verwijzing toevoegen en voeg een verwijzing toe aan System.Web.Extensions.

    Notitie

    Mogelijk moet u in het Solution Explorer met de rechtermuisknop op de naam van de voorbeeldconsoletoepassing klikken, Eigenschappen selecteren en het doelframework van uw voorbeeldtoepassing wijzigen van .NET Framework 4-clientprofiel (standaard toegewezen wanneer u een nieuwe consoletoepassing maakt) naar .NET Framework 4.

  2. Klik met de rechtermuisknop op Serviceverwijzingen, klik op Serviceverwijzing toevoegen en voeg een serviceverwijzing toe aan de beheerservice. De URL van de beheerservice is uniek voor uw naamruimte en ziet er ongeveer als volgt uit:

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

  3. Voeg de volgende declaraties toe, waarbij MyConsoleApplication de naam is van uw consoletoepassing en MyServiceReference de naam van uw serviceverwijzing is:

    using System;
    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;
    

Stap 4: de Management Service-client implementeren

In deze stap implementeert u de Management Service-client.

De Management Service-client implementeren

  1. Voeg de volgende methode toe aan de klasse 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. Voeg de volgende code toe aan de klasse Program om de methode GetTokenWithWritePermission en de bijbehorende helpermethoden te maken. GetTokenWithWritePermission en de bijbehorende helpers voegen het SWT OAuth-token toe aan de autorisatieheader van de HTTP-aanvraag.

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

Stap 5: Een service-id toevoegen

In deze stap voegt u een service-id toe met behulp van de Management Service-client die u in de bovenstaande stap hebt gemaakt. ACS-service-identiteit kan een wachtwoord, een symmetrische sleutel of een X.509-certificaat gebruiken als referentietype.

Een service-id toevoegen

  1. Initialiseer de Management Service-client door de volgende code toe te voegen aan de hoofdmethode in de klasse Program :

    ManagementService svc = CreateManagementServiceClient();
    
  2. Voer een van de volgende handelingen uit:

    • Als u een service-id wilt toevoegen die is gekoppeld aan een wachtwoord en wijzigingen wilt opslaan, voegt u de volgende code toe aan de hoofdmethode in de klasse Program :

      Notitie

      U kunt deze service-id 'SampleServiceIdentity' aanroepen en het bijbehorende wachtwoord instellen op SampleServiceIdentityPassword, zoals wordt weergegeven in de onderstaande code.

                  string name = "SampleServiceIdentity";
                  string password = "SampleServiceIdentityPassword";
                  ServiceIdentity sid = new ServiceIdentity()
                  {
                      Name = name
                  };
      
                  DateTime startDate, endDate;
                  startDate = DateTime.UtcNow;
                  endDate = DateTime.MaxValue;
      
                  ServiceIdentityKey key = new ServiceIdentityKey()
                  {
                      EndDate = endDate.ToUniversalTime(),
                      StartDate = startDate.ToUniversalTime(),
                      Type = "Password",
                      Usage = "Password",
                      Value = Encoding.UTF8.GetBytes(password),
                      DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Password", name)
                  };
      
                  svc.AddToServiceIdentities(sid);
                  svc.AddRelatedObject(
                      sid,
                      "ServiceIdentityKeys",
                      key);
      
      
                  svc.SaveChanges(SaveChangesOptions.Batch);
      
    • Als u een service-id wilt toevoegen die is gekoppeld aan een symmetrische sleutel en wijzigingen wilt opslaan, voegt u de volgende code toe aan de main-methode in de klasse Program :

      Notitie

      U kunt deze service-id SampleServiceIdentity aanroepen en de symmetrische sleutelwaarde instellen op SampleServiceIdentityPassword, zoals wordt weergegeven in de onderstaande code.

                  string name = "SampleServiceIdentity";
                  string symKey = "SampleServiceIdentitySymmetricKey";
                  ServiceIdentity sid = new ServiceIdentity()
                  {
                      Name = name
                  };
      
                  DateTime startDate, endDate;
                  startDate = DateTime.UtcNow;
                  endDate = DateTime.MaxValue;
      
                  ServiceIdentityKey key = new ServiceIdentityKey()
                  {
                      EndDate = endDate.ToUniversalTime(),
                      StartDate = startDate.ToUniversalTime(),
                      Type = "Symmetric",
                      Usage = "Signing",
                      Value = Convert.FromBase64String(symKey),
                      DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Sym Key", name)
                  };
      
                  svc.AddToServiceIdentities(sid);
                  svc.AddRelatedObject(
                      sid,
                      "ServiceIdentityKeys",
                      key);
      
      
                  svc.SaveChanges(SaveChangesOptions.Batch);
      
    • Als u een service-id wilt toevoegen die is gekoppeld aan een X.509-certificaat en wijzigingen wilt opslaan, voegt u de volgende code toe aan de hoofdmethode in de klasse Program :

      Notitie

      U kunt deze service-id 'SampleServiceIdentity' aanroepen, zoals wordt weergegeven in de onderstaande code

      Vervang in de onderstaande code 'Volledig pad naar uw . CER-bestand met het volledig gekwalificeerde pad naar uw X.509-certificaat. Als een certificaat met de naam ACS2ClientCertificate.cer bijvoorbeeld wordt opgeslagen in C:\, is de juiste waarde 'C:\ ACS2ClientCertificate.cer".

                  string name = "SampleServiceIdentity";
                  X509Certificate2 cert = new X509Certificate2(@"Full path to your .CER file");
      
                  ServiceIdentity sid = new ServiceIdentity()
                  {
                      Name = name
                  };
      
                  DateTime startDate, endDate;
      
                  startDate = cert.NotBefore.ToUniversalTime();
                  endDate = cert.NotAfter.ToUniversalTime();
      
                  ServiceIdentityKey key = new ServiceIdentityKey()
                  {
                      EndDate = endDate.ToUniversalTime(),
                      StartDate = startDate.ToUniversalTime(),
                      Type = "X509Certificate",
                      Usage = "Signing",
                      Value = cert.GetRawCertData(),
                      DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Cert", name)
                  };
      
                  svc.AddToServiceIdentities(sid);
                  svc.AddRelatedObject(
                      sid,
                      "ServiceIdentityKeys",
                      key);
      
      
                  svc.SaveChanges(SaveChangesOptions.Batch);
      

Zie ook

Concepten

ACS-instructies