Sdílet prostřednictvím


Postupy: Konfigurace certifikátů a klíčů pomocí služby ACS Management Service

Aktualizováno: 19. června 2015

Platí pro: Azure

Platí pro

  • Microsoft Azure Active Directory Access Control (označované také jako služba Access Control nebo služba ACS)

Přehled

Certifikáty a klíče služby ACS můžete nakonfigurovat pomocí portálu pro správu služby ACS nebo služby pro správu služby ACS. Práce se službou ACS Management Service může být efektivnější, pokud vytváříte vlastní uživatelské rozhraní pro správu služby ACS nebo pokud chcete automatizovat onboarding nového tenanta pro řešení SaaS (Software as a Service) s více tenanty.

Další informace o použití portálu pro správu služby ACS ke konfiguraci certifikátů a klíčů najdete v tématu Certifikáty a klíče.

Postup konfigurace certifikátů a klíčů pomocí služby ACS Management Service

Důležité

Před provedením následujících kroků se ujistěte, že váš systém splňuje všechny požadavky rozhraní .NET Framework a platformy, které jsou shrnuté v požadavcích služby ACS.

Pokud chcete nakonfigurovat certifikáty a klíče pomocí služby ACS Management Service, proveďte následující kroky:

  • Krok 1 – Shromažďování informací o konfiguraci služby ACS

  • Krok 2 – Vytvoření ukázkové konzolové aplikace

  • Krok 3 – Přidání odkazů na požadované služby a sestavení

  • Krok 4 – Implementace klienta služby pro správu

  • Krok 5 – Instalace certifikátů a klíčů

    • Přidání podpisového certifikátu tokenu pro váš obor názvů Access Control

    • Přidání podpisového certifikátu tokenu pro aplikaci předávající strany

    • Přidání podpisového klíče tokenu pro obor názvů Access Control

    • Přidání podpisového klíče tokenu pro aplikaci předávající strany

    • Přidání certifikátu šifrování tokenu

    • Přidání certifikátu dešifrování tokenu

Krok 1 – Shromažďování informací o konfiguraci služby ACS

Pomocí portálu pro správu služby ACS můžete shromažďovat potřebné informace o konfiguraci. Další informace najdete v tématu Portál pro správu služby ACS.

Shromažďování informací o konfiguraci služby ACS

  1. Přejděte na portál pro správu Microsoft Azure (https://manage.WindowsAzure.com), přihlaste se a klikněte na Active Directory. (Tip pro řešení potíží: Položka Active Directory chybí nebo není k dispozici)

  2. Pokud chcete spravovat Access Control obor názvů, vyberte obor názvů a klikněte na Spravovat. (Nebo klikněte na Access Control Obory názvů, vyberte obor názvů a potom klikněte na Spravovat.)

  3. Klepněte na tlačítko Správa služby, klepněte na položku ManagementClient a potom klepněte na tlačítko Heslo.

  4. Zkopírujte hodnotu do pole Heslo .

  5. Klikněte na Možnost Správa. Získejte hodnotu oboru názvů služby a názvu hostitele služby ACS. Pokud je http://contoso.accesscontrol.windows.netadresa URL služby pro správu , obor názvů je contoso a název hostitele je accesscontrol.windows.net.

Krok 2 – Vytvoření ukázkové konzolové aplikace

V tomto kroku vytvoříte ukázkovou konzolovou aplikaci, která může spustit kód pro přidání skupin a pravidel pravidel služby ACS.

Vytvoření ukázkové konzolové aplikace

  1. Otevřete Visual Studio 2012 a vytvořte nový projekt konzolové aplikace v rámci šablony nainstalované Windows.

  2. Do třídy Program přidejte následující kód a pak přiřaďte proměnné serviceIdentityPasswordForManagement, serviceNamespace a acsHostName k příslušným konfiguračním informacím, které jste shromáždili v předchozím kroku.

    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;
    

Krok 3 – Přidání odkazů na požadované služby a sestavení

V tomto kroku identifikujete a přidáte požadované závislosti do služeb a sestavení.

Přidání požadovaných závislostí do služeb a sestavení

  1. Klikněte pravým tlačítkem myši na Odkazy, klikněte na Přidat odkaz a přidejte odkaz na System.Web.Extensions.

    Poznámka

    Možná budete muset kliknout pravým tlačítkem myši na název ukázkové konzolové aplikace v Průzkumník řešení, vybrat vlastnosti a změnit cílovou architekturu ukázkové aplikace z klientského profilu rozhraní .NET Framework 4 (ve výchozím nastavení při vytváření nové konzolové aplikace) na rozhraní .NET Framework 4.

  2. Klikněte pravým tlačítkem na Odkazy na službu, klikněte na Přidat odkaz na službu a přidejte odkaz na službu pro správu. Adresa URL služby pro správu je jedinečná pro váš obor názvů a vypadá podobně jako následující:

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

  3. Přidejte následující deklarace, kde MyConsoleApplication je název konzolové aplikace a MyServiceReference je název odkazu na vaši službu:

    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;
    

Krok 4 – Implementace klienta služby pro správu

V tomto kroku implementujete klienta služby pro správu.

Implementace klienta služby pro správu

  1. Do třídy Program přidejte následující metodu:

       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. Přidejte metodu GetTokenWithWritePermission a její pomocné metody do třídy Program . GetTokenWithWritePermission a jeho pomocné rutiny přidávají token SWT OAuth do hlavičky autorizace požadavku 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;
    
            }
    

Krok 5 – Přidání certifikátů a klíčů

Přidání podpisového certifikátu tokenu pro váš obor názvů Access Control

V tomto příkladu vytvoříte podpisový certifikát X.509 pro váš obor názvů Access Control.

Přidání podpisového certifikátu tokenu pro všechny aplikace předávající strany v oboru názvů Access Control

  1. Inicializace klienta služby pro správu přidáním následujícího kódu do main metody ve třídě Program :

    ManagementService svc = CreateManagementServiceClient();
    
  2. Vytvořte pomocnou funkci ReadBytesFromPfxFile pro čtení bajtů z certifikátu X.509 přidáním následujícího kódu do třídy 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. Pokud chcete přidat podpisový certifikát X.509 tokenu, přidejte do třídyProgram následující kód:

    Poznámka

    Nahraďte úplnou cestu k vaší . Soubor PFX s platnou úplnou cestou k certifikátu X.509 Například "C:\ ACS2ClientCertificate.pfx

    Nahraďte "MyCertificatePassword" heslem pro certifikát X.509.

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

Přidání podpisového certifikátu tokenu pro aplikaci předávající strany

V tomto příkladu vytvoříte podpisový certifikát X.509, který je přiřazen ke konkrétní aplikaci předávající strany.

Přidání podpisového certifikátu tokenu pro aplikaci předávající strany

  1. Inicializace klienta služby pro správu přidáním následujícího kódu do main metody ve třídě Program :

    ManagementService svc = CreateManagementServiceClient();
    
  2. Vytvořte pomocnou funkci ReadBytesFromPfxFile pro čtení bajtů z certifikátu X.509 přidáním následujícího kódu do třídy 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. Pokud chcete přidat podpisový certifikát X.509 tokenu, přidejte do třídyProgram následující kód:

    Poznámka

    Nahraďte úplnou cestu k vaší . Soubor PFX s úplnou cestou k certifikátu X.509 Například "C:\ ACS2ClientCertificate.pfx

    Nahraďte "MyCertificatePassword" heslem pro certifikát X.509.

    Nahraďte MyRelyingPartyApplication názvem aplikace předávající strany.

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

Přidání podpisového klíče tokenu pro váš obor názvů Access Control

V tomto příkladu přiřadíte tento podpis symetrický klíč k oboru názvů Access Control.

Přidání symetrického klíče tokenu pro obor názvů Access Control

  1. Inicializace klienta služby pro správu přidáním následujícího kódu do main metody ve třídě Program :

    ManagementService svc = CreateManagementServiceClient();
    
  2. Pokud chcete přidat podpisový klíč tokenu symetrického klíče, přidejte do metody Main ve třídě Program následující kód:

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

Přidání podpisového klíče tokenu pro aplikaci předávající strany

V tomto příkladu přiřadíte nový podpisový symetrický klíč k konkrétní aplikaci předávající strany.

Přidání symetrického klíče tokenu pro aplikaci předávající strany

  1. Inicializace klienta služby pro správu přidáním následujícího kódu do main metody ve třídě Program :

    ManagementService svc = CreateManagementServiceClient();
    
  2. Pokud chcete přidat podpisový klíč tokenu symetrického klíče, přidejte do metody Main ve třídě Program následující kód:

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

Přidání certifikátu šifrování tokenu

V tomto příkladu přidáte šifrovací certifikát tokenu X.509 pro konkrétní aplikaci předávající strany.

Přidání šifrovacího certifikátu tokenu pro aplikaci předávající strany

  1. Inicializace klienta služby pro správu přidáním následujícího kódu do main metody ve třídě Program :

    ManagementService svc = CreateManagementServiceClient();
    
  2. Pokud chcete přidat certifikát X.509 šifrování tokenu, přidejte do metody Main ve třídě Program následující kód:

    Poznámka

    Nahraďte úplnou cestu k vaší . Soubor CER s úplnou cestou k certifikátu X.509 Například "C:\ ACS2ClientCertificate.cer

    Nahraďte "MyCertificatePassword" heslem pro certifikát X.509.

    Nahraďte myRelyingPartyApplication názvem aplikace předávající strany.

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

Přidání certifikátu dešifrování tokenu

V tomto příkladu přidáte certifikát dešifrování tokenu X.509 přiřazený k vašemu oboru názvů Access Control.

Přidání podpisového certifikátu tokenu pro všechny aplikace předávající strany v oboru názvů Access Control

  1. Inicializace klienta služby pro správu přidáním následujícího kódu do main metody ve třídě Program :

    ManagementService svc = CreateManagementServiceClient();
    
  2. Vytvořte pomocnou funkci ReadBytesFromPfxFile pro čtení bajtů z certifikátu X.509 přidáním následujícího kódu do třídy 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. Pokud chcete přidat podpisový certifikát X.509 tokenu, přidejte do třídyProgram následující kód:

    Poznámka

    Nahraďte "Úplná cesta k vašemu . Soubor PFX v následujícím kódu s platnou úplnou cestou k vašemu certifikátu X.509. Pokud je například certifikát s názvem ACS2ClientCertificate.pfx uložen v části C:, správná hodnota je C:\ ACS2ClientCertificate.pfx

    Nahraďte "MyCertificatePassword" v následujícím kódu správným heslem pro váš certifikát X.509.

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

Viz také

Koncepty

Postupy ACS