Procedure: ACS Management Service gebruiken om Relying Party-toepassingen 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 Relying Party-toepassingen configureren met behulp van de ACS-beheerportal (zie Relying Party-toepassingen) of de ACS Management-service voor meer informatie. 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.
Stappen voor het configureren van Relying Party-toepassingen 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 relying party-toepassingen 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: een Relying Party-toepassing toevoegen
Stap 1: ACS-configuratiegegevens verzamelen
U kunt de ACS-beheerportal gebruiken om de benodigde configuratiegegevens te verzamelen. Zie acs-beheerportal voor meer informatie over het starten van de ACS-beheerportal.
ACS-configuratiegegevens verzamelen
Start de ACS-beheerportal. Zie acs-beheerportal voor meer informatie over het starten van de ACS-beheerportal.
Haal de waarde op van het ACS-beheerserviceaccount. U kunt het standaard ManagementClient-account gebruiken. Als u deze waarde wilt weergeven, klikt u in de ACS-beheerportal op Beheerservice onder de sectie Beheer in de structuur aan de linkerkant van de pagina.
Haal de waarde op van het wachtwoord van het ACS Management Service-account. Ga als volgt te werk om deze waarde weer te geven:
Klik in de ACS-beheerportal op Beheerservice onder de sectie Beheer in de structuur aan de linkerkant van de pagina.
Klik op de pagina Beheerservice op ManagementClient onder Beheerserviceaccounts.
Klik op de pagina Beheerserviceaccount bewerken onder Referenties op Wachtwoord.
Kopieer op de pagina Beheerreferenties bewerken de waarde in het veld Wachtwoord .
Haal de naam van uw Azure-naamruimte op. U kunt deze waarde ophalen uit de Azure Portal of via de URL van uw ACS-beheerportal. De http://contoso.accesscontrol.windows.netnaamruimtenaam is bijvoorbeeld contoso.
Haal de ACS-hostnaam op. Meestal is het 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:
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: een Relying Party-toepassing toevoegen
In deze stap maakt u een voorbeeld van een relying party-toepassing met een SAML 2.0-tokenindeling (standaardoptie), geen tokenversleutelingsbeleid (standaardoptie), gekoppeld aan een id-provider van Windows Live ID (Microsoft-account) (standaardoptie), 600 seconden levensduur van tokens (standaardoptie) en een aangepast X.509-handtekeningcertificaat voor uw relying party-toepassing of een tokenondertekeningscertificaat voor de tokenondertekening voor de Access Control naamruimte.
Een relying party-toepassing toevoegen met een Access Control naamruimte-tokenondertekeningscertificaat
Initialiseer de Management Service-client door de volgende code toe te voegen aan de hoofdmethode in de klasse Program :
ManagementService svc = CreateManagementServiceClient();
Voeg uw nieuwe relying party-toepassing toe (u kunt deze 'MyRelyingPartyApplication' noemen, zoals wordt weergegeven in de onderstaande code) en sla de wijzigingen op door de volgende code toe te voegen 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.cer bijvoorbeeld wordt opgeslagen onder C:, is de juiste waarde C:\ ACS2ClientCertificate.cer".
Vervang 'MyCertificatePassword' in de onderstaande code door het juiste wachtwoord voor uw X.509-certificaat.//Create Relying Party Application RelyingParty relyingParty = new RelyingParty() { Name = "MyRelyingPartyApplication", AsymmetricTokenEncryptionRequired = false, TokenType = "SAML_2_0", TokenLifetime = 3600 }; svc.AddToRelyingParties(relyingParty); //Create the Realm Address RelyingPartyAddress realmAddress = new RelyingPartyAddress() { Address = "http://TestRelyingParty.com/Realm", EndpointType = "Realm" }; svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", realmAddress); //Create the Return URL Address RelyingPartyAddress replyAddress = new RelyingPartyAddress() { Address = "http://TestRelyingParty.com/Reply", EndpointType = "Reply" }; svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", replyAddress); // Create a Rule Group for This Relying Party Application RuleGroup rg = new RuleGroup(); rg.Name = "SampleRuleGroup For " + relyingParty.Name; svc.AddToRuleGroups(rg); // Assign This New Rule Group to Your New Relying Party Application RelyingPartyRuleGroup relyingPartyRuleGroup = new RelyingPartyRuleGroup(); svc.AddToRelyingPartyRuleGroups(relyingPartyRuleGroup); svc.AddLink(relyingParty, "RelyingPartyRuleGroups", relyingPartyRuleGroup); svc.AddLink(rg, "RelyingPartyRuleGroups", relyingPartyRuleGroup); //Save Your New Relying Party Application svc.SaveChanges(SaveChangesOptions.Batch);
Een relying party-toepassing toevoegen met een toegewezen tokenondertekeningscertificaat
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; }
Voeg uw nieuwe relying party-toepassing toe (u kunt deze 'MyRelyingPartyApplication' noemen, zoals wordt weergegeven in de onderstaande code) en sla de wijzigingen op door de volgende code toe te voegen 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.cer bijvoorbeeld wordt opgeslagen onder C:, is de juiste waarde C:\ ACS2ClientCertificate.cer".
Vervang 'MyCertificatePassword' in de onderstaande code door het juiste wachtwoord voor uw X.509-certificaat.//Create Relying Party Application RelyingParty relyingParty = new RelyingParty() { Name = "MyRelyingPartyApplication", AsymmetricTokenEncryptionRequired = false, TokenType = "SAML_2_0", TokenLifetime = 3600 }; svc.AddToRelyingParties(relyingParty); //Create the Realm Address RelyingPartyAddress realmAddress = new RelyingPartyAddress() { Address = "http://TestRelyingParty.com/Realm", EndpointType = "Realm" }; svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", realmAddress); //Create the Return URL Address RelyingPartyAddress replyAddress = new RelyingPartyAddress() { Address = "http://TestRelyingParty.com/Reply", EndpointType = "Reply" }; svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", replyAddress); //Create 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") }; svc.AddRelatedObject(relyingParty, "RelyingPartyKeys", relyingPartyKey); // Create a Rule Group for This Relying Party Application RuleGroup rg = new RuleGroup(); rg.Name = "SampleRuleGroup For " + relyingParty.Name; svc.AddToRuleGroups(rg); // Assign This New Rule Group to Your New Relying Party Application RelyingPartyRuleGroup relyingPartyRuleGroup = new RelyingPartyRuleGroup(); svc.AddToRelyingPartyRuleGroups(relyingPartyRuleGroup); svc.AddLink(relyingParty, "RelyingPartyRuleGroups", relyingPartyRuleGroup); svc.AddLink(rg, "RelyingPartyRuleGroups", relyingPartyRuleGroup); //Save Your New Relying Party Application svc.SaveChanges(SaveChangesOptions.Batch);