Share via


Procedure: ACS Management Service gebruiken om certificaten en sleutels 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-certificaten en -sleutels configureren met behulp van de ACS-beheerportal of de ACS-beheerservice. 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.

Zie Certificaten en sleutels voor meer informatie over het gebruik van de ACS-beheerportal voor het configureren van certificaten en sleutels.

Stappen voor het configureren van certificaten en sleutels 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 certificaten en sleutels 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: Certificaten en sleutels installeren

    • Een tokenondertekeningscertificaat toevoegen voor uw Access Control naamruimte

    • Een tokenondertekeningscertificaat toevoegen voor een Relying Party-toepassing

    • Een symmetrische sleutel voor tokenondertekening toevoegen voor uw Access Control-naamruimte

    • Een symmetrische sleutel voor tokenondertekening toevoegen voor een Relying Party-toepassing

    • Een tokenversleutelingscertificaat toevoegen

    • Een tokenontsleutelingscertificaat toevoegen

Stap 1: ACS-configuratiegegevens verzamelen

U kunt de ACS-beheerportal gebruiken om de benodigde configuratiegegevens te verzamelen. Zie DE ACS-beheerportal voor meer informatie.

ACS-configuratiegegevens verzamelen

  1. Ga naar de Microsoft Azure-beheerportal (https://manage.WindowsAzure.com), meld u aan en klik vervolgens op Active Directory. (Tip voor probleemoplossing: Item 'Active Directory' ontbreekt of is niet beschikbaar)

  2. Als u een Access Control naamruimte wilt beheren, selecteert u de naamruimte en klikt u op Beheren. (Of klik op Access Control Naamruimten, selecteer de naamruimte en klik vervolgens op Beheren.)

  3. Klik op Beheerservice, klik op ManagementClient en klik vervolgens op Wachtwoord.

  4. Kopieer de waarde in het veld Wachtwoord .

  5. Klik op Beheerservice. Haal de waarde op van uw servicenaamruimte en ACS-hostnaam. Als de URL van uw managementservice is http://contoso.accesscontrol.windows.net, is de naamruimte contoso en de hostnaam 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-regelgroepen en -regels.

Een voorbeeldconsoletoepassing maken

  1. Open Visual Studio 2012 en maak een nieuw consoletoepassingsproject onder de Windows geïnstalleerde sjabloon.

  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 vorige 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.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;
    

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 methode GetTokenWithWritePermission en de bijbehorende helpermethoden toe aan de klasse Program . 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: Certificaten en sleutels toevoegen

Een tokenondertekeningscertificaat toevoegen voor uw Access Control naamruimte

In dit voorbeeld maakt u een X.509-handtekeningcertificaat voor uw Access Control naamruimte.

Een tokenondertekeningscertificaat toevoegen voor alle relying party-toepassingen in de Access Control naamruimte

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

    ManagementService svc = CreateManagementServiceClient();
    
  2. Maak een Helper-functie ReadBytesFromPfxFile om bytes van uw X.509-certificaat te lezen door de volgende code toe te voegen aan de klasse 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. Als u een X.509-certificaat voor tokenondertekening wilt toevoegen, voegt u de volgende code toe aan de hoofdmethode in de klasse Program :

    Notitie

    Vervang 'Volledig pad naar uw . PFX-bestand met het geldige volledige pad naar uw X.509-certificaat. Bijvoorbeeld 'C:\ ACS2ClientCertificate.pfx'.

    Vervang MyCertificatePassword door het wachtwoord voor uw X.509-certificaat.

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

Een tokenondertekeningscertificaat toevoegen voor een Relying Party-toepassing

In dit voorbeeld maakt u een X.509-handtekeningcertificaat dat is toegewezen aan een bepaalde relying party-toepassing.

Een tokenondertekeningscertificaat toevoegen voor een relying party-toepassing

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

    ManagementService svc = CreateManagementServiceClient();
    
  2. Maak een helperfunctie ReadBytesFromPfxFile om bytes uit uw X.509-certificaat te lezen door de volgende code toe te voegen aan de klasse 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. Als u een X.509-certificaat voor tokenondertekening wilt toevoegen, voegt u de volgende code toe aan de hoofdmethode in de klasse Program :

    Notitie

    Vervang 'Volledig pad naar uw . PFX-bestand met het volledige pad naar uw X.509-certificaat. Bijvoorbeeld 'C:\ ACS2ClientCertificate.pfx'.

    Vervang MyCertificatePassword door het wachtwoord voor uw X.509-certificaat.

    Vervang MyRelyingPartyApplication door de naam van de relying party-toepassing.

    //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);
    

Een symmetrische sleutel voor tokenondertekening toevoegen voor uw Access Control naamruimte

In dit voorbeeld wijst u deze symmetrische handtekeningsleutel toe aan uw Access Control naamruimte.

Een symmetrische sleutel voor tokenondertekening toevoegen voor uw Access Control-naamruimte

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

    ManagementService svc = CreateManagementServiceClient();
    
  2. Als u een symmetrische sleutel voor tokenondertekening wilt toevoegen, voegt u de volgende code toe aan de main-methode in de klasse 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);
    

Een symmetrische sleutel voor tokenondertekening toevoegen voor een Relying Party-toepassing

In dit voorbeeld wijst u uw nieuwe symmetrische handtekeningsleutel toe aan een bepaalde relying party-toepassing.

Een symmetrische sleutel voor tokenondertekening toevoegen voor een relying party-toepassing

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

    ManagementService svc = CreateManagementServiceClient();
    
  2. Als u een symmetrische sleutel voor tokenondertekening wilt toevoegen, voegt u de volgende code toe aan de main-methode in de klasse 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);        
    

Een tokenversleutelingscertificaat toevoegen

In dit voorbeeld voegt u een X.509-tokenversleutelingscertificaat toe voor een bepaalde relying party-toepassing.

Een tokenversleutelingscertificaat toevoegen voor een relying party-toepassing

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

    ManagementService svc = CreateManagementServiceClient();
    
  2. Als u een X.509-certificaat voor tokenversleuteling wilt toevoegen, voegt u de volgende code toe aan de hoofdmethode in de klasse Program :

    Notitie

    Vervang 'Volledig pad naar uw . CER-bestand met het volledige pad naar een X.509-certificaat. Bijvoorbeeld 'C:\ ACS2ClientCertificate.cer".

    Vervang MyCertificatePassword door het wachtwoord voor het X.509-certificaat.

    Vervang MyRelyingPartyApplication door de naam van een relying party-toepassing.

    //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);     
    

Een tokenontsleutelingscertificaat toevoegen

In dit voorbeeld voegt u een X.509-tokenontsleutelingscertificaat toe dat is toegewezen aan uw Access Control naamruimte.

Een tokenondertekeningscertificaat toevoegen voor alle relying party-toepassingen in de Access Control naamruimte

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

    ManagementService svc = CreateManagementServiceClient();
    
  2. Maak een helperfunctie ReadBytesFromPfxFile om bytes uit uw X.509-certificaat te lezen door de volgende code toe te voegen aan de klasse 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. Als u een X.509-certificaat voor tokenondertekening wilt toevoegen, voegt u de volgende code toe aan de hoofdmethode in de klasse Program :

    Notitie

    Vervang 'Volledig pad naar uw . PFX-bestand" in de onderstaande code met het geldige volledige pad naar uw X.509-certificaat. Als een certificaat met de naam ACS2ClientCertificate.pfx bijvoorbeeld wordt opgeslagen onder C:, is de juiste waarde C:\ ACS2ClientCertificate.pfx'.

    Vervang 'MyCertificatePassword' in de onderstaande code door het juiste wachtwoord voor uw X.509-certificaat.

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

Zie ook

Concepten

ACS-instructies