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
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)
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.)
Klepněte na tlačítko Správa služby, klepněte na položku ManagementClient a potom klepněte na tlačítko Heslo.
Zkopírujte hodnotu do pole Heslo .
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
Otevřete Visual Studio 2012 a vytvořte nový projekt konzolové aplikace v rámci šablony nainstalované Windows.
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í
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.
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
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
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; }
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
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();
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; }
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
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();
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; }
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
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();
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
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();
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
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();
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
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();
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; }
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);