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
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)
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.)
Klik op Beheerservice, klik op ManagementClient en klik vervolgens op Wachtwoord.
Kopieer de waarde in het veld Wachtwoord .
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
Open Visual Studio 2012 en maak een nieuw consoletoepassingsproject onder de Windows geïnstalleerde sjabloon.
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
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.
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
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
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; }
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
Initialiseer de Management Service-client door de volgende code toe te voegen aan de hoofdmethode in de klasse Program :
ManagementService svc = CreateManagementServiceClient();
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; }
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
Initialiseer de Management Service-client door de volgende code toe te voegen aan de hoofdmethode in de klasse Program :
ManagementService svc = CreateManagementServiceClient();
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; }
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
Initialiseer de Management Service-client door de volgende code toe te voegen aan de hoofdmethode in de klasse Program :
ManagementService svc = CreateManagementServiceClient();
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
Initialiseer de Management Service-client door de volgende code toe te voegen aan de hoofdmethode in de klasse Program :
ManagementService svc = CreateManagementServiceClient();
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
Initialiseer de Management Service-client door de volgende code toe te voegen aan de hoofdmethode in de klasse Program :
ManagementService svc = CreateManagementServiceClient();
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
Initialiseer de Management Service-client door de volgende code toe te voegen aan de hoofdmethode in de klasse Program :
ManagementService svc = CreateManagementServiceClient();
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; }
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);