Dela via


Anvisningar: Använda ACS-hanteringstjänsten för att konfigurera certifikat och nycklar

Uppdaterad: 19 juni 2015

Gäller för: Azure

Gäller för

  • Microsoft Azure Active Directory Access Control (kallas även Access Control Service eller ACS)

Översikt

Du kan konfigurera ACS-certifikat och nycklar med antingen ACS-hanteringsportalen eller ACS-hanteringstjänsten. Att arbeta med ACS-hanteringstjänsten kan vara mer effektivt om du skapar ett anpassat användargränssnitt för att hantera ACS eller om du vill automatisera registrering av en ny klientorganisation för SaaS-lösningar (Programvara som en tjänst för flera innehavare).

Mer information om hur du använder ACS-hanteringsportalen för att konfigurera certifikat och nycklar finns i Certifikat och nycklar.

Steg för att konfigurera certifikat och nycklar med hjälp av ACS-hanteringstjänsten

Viktigt

Innan du utför följande steg kontrollerar du att systemet uppfyller alla krav för .NET-ramverket och plattformen som sammanfattas i ACS-krav.

Utför följande steg för att konfigurera certifikat och nycklar med hjälp av ACS-hanteringstjänsten:

  • Steg 1 – Samla in information om ACS-konfiguration

  • Steg 2 – Skapa ett exempelkonsolprogram

  • Steg 3 – Lägg till referenser till nödvändiga tjänster och sammansättningar

  • Steg 4 – Implementera hanteringstjänstklienten

  • Steg 5 – Installera certifikat och nycklar

    • Lägg till ett tokensigneringscertifikat för ditt Access Control namnområde

    • Lägga till ett tokensigneringscertifikat för ett förlitande part-program

    • Lägg till en symmetrisk nyckel för tokensignering för ditt Access Control namnområde

    • Lägga till en symmetrisk nyckel för tokensignering för ett förlitande part-program

    • Lägga till ett tokenkrypteringscertifikat

    • Lägga till ett certifikat för tokendekryptering

Steg 1 – Samla in information om ACS-konfiguration

Du kan använda ACS-hanteringsportalen för att samla in nödvändig konfigurationsinformation. Mer information finns i ACS-hanteringsportalen.

Samla in acs-konfigurationsinformation

  1. Gå till Microsoft Azure Management Portal (https://manage.WindowsAzure.com), logga in och klicka sedan på Active Directory. (Felsökningstips: "Active Directory"-objektet saknas eller är inte tillgängligt)

  2. Om du vill hantera ett Access Control namnområde väljer du namnområdet och klickar sedan på Hantera. (Eller klicka på Access Control namnområden, välj namnområdet och klicka sedan på Hantera.)

  3. Klicka på Hanteringstjänst, på HanteringKlient och sedan på Lösenord.

  4. Kopiera värdet i fältet Lösenord .

  5. Klicka på Hanteringstjänst. Hämta värdet för tjänstnamnområdet och ACS-värdnamnet. Om url:en för hanteringstjänsten är http://contoso.accesscontrol.windows.netär namnområdet contoso och värdnamnet är accesscontrol.windows.net.

Steg 2 – Skapa ett exempelkonsolprogram

I det här steget skapar du ett exempelkonsolprogram som kan köra koden för att lägga till dina ACS-regelgrupper och regler.

Så här skapar du ett exempelkonsolprogram

  1. Öppna Visual Studio 2012 och skapa ett nytt konsolprogramprojekt under den Windows installerade mallen.

  2. Lägg till följande kod i klassen Program och tilldela sedan variablerna serviceIdentityPasswordForManagement, serviceNamespace och acsHostName till lämplig konfigurationsinformation som du samlade in i föregående steg.

    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;
    

Steg 3 – Lägg till referenser till nödvändiga tjänster och sammansättningar

I det här steget identifierar och lägger du till nödvändiga beroenden i tjänsterna och sammansättningarna.

Så här lägger du till nödvändiga beroenden i tjänsterna och sammansättningarna

  1. Högerklicka på Referenser, klicka på Lägg till referens och lägg till en referens till System.Web.Extensions.

    Anteckning

    Du kan behöva högerklicka på exempelkonsolens programnamn i Solution Explorer, välja Egenskaper och ändra målramverket för exempelprogrammet från .NET Framework 4-klientprofilen (tilldelad som standard när du skapar ett nytt konsolprogram) till .NET Framework 4.

  2. Högerklicka på Tjänstreferenser, klicka på Lägg till tjänstreferens och lägg till en tjänstreferens till hanteringstjänsten. Url:en för hanteringstjänsten är unik för ditt namnområde och ser ut ungefär så här:

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

  3. Lägg till följande deklarationer, där MyConsoleApplication är namnet på konsolprogrammet och MyServiceReference är namnet på tjänstreferensen:

    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;
    

Steg 4 – Implementera hanteringstjänstklienten

I det här steget implementerar du hanteringstjänstens klient.

Så här implementerar du hanteringstjänstens klient

  1. Lägg till följande metod i klassen 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. Lägg till metoden GetTokenWithWritePermission och dess hjälpmetoder i klassen Program . GetTokenWithWritePermission och dess hjälpkomponenter lägger till SWT OAuth-token i auktoriseringshuvudet för HTTP-begäran.

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

Steg 5 – Lägg till certifikat och nycklar

Lägg till ett tokensigneringscertifikat för ditt Access Control namnområde

I det här exemplet skapar du ett X.509-signeringscertifikat för ditt Access Control namnområde.

Så här lägger du till ett tokensigneringscertifikat för alla program för förlitande part i namnområdet Access Control

  1. Initiera Management Service-klienten genom att lägga till följande kod i Main-metoden i klassen Program :

    ManagementService svc = CreateManagementServiceClient();
    
  2. Skapa hjälpfunktionen ReadBytesFromPfxFile för att läsa byte från X.509-certifikatet genom att lägga till följande kod i klassen 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. Om du vill lägga till ett X.509-certifikat för tokensignering lägger du till följande kod i Main-metoden i klassen Program :

    Anteckning

    Ersätt "Fullständig sökväg till din . PFX-fil" med den giltiga fullständiga sökvägen till X.509-certifikatet. Till exempel "C:\ ACS2ClientCertificate.pfx".

    Ersätt "MyCertificatePassword" med lösenordet för ditt X.509-certifikat.

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

Lägga till ett tokensigneringscertifikat för ett förlitande part-program

I det här exemplet skapar du ett X.509-signeringscertifikat som har tilldelats till ett visst förlitande part-program.

Så här lägger du till ett tokensigneringscertifikat för ett förlitande part-program

  1. Initiera Management Service-klienten genom att lägga till följande kod i Main-metoden i klassen Program :

    ManagementService svc = CreateManagementServiceClient();
    
  2. Skapa en hjälpfunktion ReadBytesFromPfxFile för att läsa byte från X.509-certifikatet genom att lägga till följande kod i klassen 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. Om du vill lägga till ett X.509-certifikat för tokensignering lägger du till följande kod i Main-metoden i klassen Program :

    Anteckning

    Ersätt "Fullständig sökväg till din . PFX-fil" med den fullständiga sökvägen till X.509-certifikatet. Till exempel "C:\ ACS2ClientCertificate.pfx".

    Ersätt "MyCertificatePassword" med lösenordet för ditt X.509-certifikat.

    Ersätt "MyRelyingPartyApplication" med namnet på det förlitande partprogrammet.

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

Lägg till en symmetrisk nyckel för tokensignering för ditt Access Control namnområde

I det här exemplet tilldelar du den här symmetriska signeringsnyckeln till din Access Control namnrymd.

Så här lägger du till en symmetrisk nyckel för tokensignering för din Access Control namnrymd

  1. Initiera Management Service-klienten genom att lägga till följande kod i Main-metoden i klassen Program :

    ManagementService svc = CreateManagementServiceClient();
    
  2. Lägg till en symmetrisk nyckel för tokensignering genom att lägga till följande kod i Main-metoden i klassen 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);
    

Lägga till en symmetrisk nyckel för tokensignering för ett förlitande part-program

I det här exemplet tilldelar du din nya symmetriska signeringsnyckel till ett visst förlitande part-program.

Så här lägger du till en symmetrisk nyckel för tokensignering för ett förlitande part-program

  1. Initiera Management Service-klienten genom att lägga till följande kod i Main-metoden i klassen Program :

    ManagementService svc = CreateManagementServiceClient();
    
  2. Lägg till en symmetrisk nyckel för tokensignering genom att lägga till följande kod i Main-metoden i klassen 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);        
    

Lägga till ett tokenkrypteringscertifikat

I det här exemplet lägger du till ett X.509-tokenkrypteringscertifikat för ett visst förlitande part-program.

Så här lägger du till ett tokenkrypteringscertifikat för ett förlitande part-program

  1. Initiera Management Service-klienten genom att lägga till följande kod i Main-metoden i klassen Program :

    ManagementService svc = CreateManagementServiceClient();
    
  2. Om du vill lägga till ett X.509-certifikat för tokenkryptering lägger du till följande kod i Main-metoden i klassen Program :

    Anteckning

    Ersätt "Fullständig sökväg till din . CER-fil" med den fullständiga sökvägen till ett X.509-certifikat. Till exempel "C:\ ACS2ClientCertificate.cer".

    Ersätt "MyCertificatePassword" med lösenordet för X.509-certifikatet.

    Ersätt "MyRelyingPartyApplication" med namnet på ett förlitande partprogram.

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

Lägga till ett tokendekrypteringscertifikat

I det här exemplet lägger du till ett X.509-tokendekrypteringscertifikat som tilldelats till Access Control namnområde.

Så här lägger du till ett tokensigneringscertifikat för alla förlitande partprogram i Access Control namnområde

  1. Initiera hanteringstjänstklienten genom att lägga till följande kod i Main-metoden i klassen Program :

    ManagementService svc = CreateManagementServiceClient();
    
  2. Skapa en hjälpfunktion ReadBytesFromPfxFile för att läsa byte från X.509-certifikatet genom att lägga till följande kod i klassen 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. Om du vill lägga till ett X.509-certifikat för tokensignering lägger du till följande kod i main-metoden i klassen Program :

    Anteckning

    Ersätt "Fullständig sökväg till din . PFX-fil" i koden nedan med den giltiga fullständiga sökvägen till X.509-certifikatet. Om till exempel ett certifikat med namnet ACS2ClientCertificate.pfx sparas under C:, är rätt värde "C:\ ACS2ClientCertificate.pfx".

    Ersätt "MyCertificatePassword" i koden nedan med rätt lösenord för ditt X.509-certifikat.

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

Se även

Begrepp

ACS Så här gör du