Procedure: ACS Management Service gebruiken om AD FS 2.0 te configureren als een Enterprise Identity Provider
Bijgewerkt: 19 juni 2015
Van toepassing op: Azure
Van toepassing op
Microsoft® Azure™ Access Control Service (ACS)
Microsoft Active Directory® Federation Services (AD FS) 2.0
Samenvatting
In dit onderwerp wordt uitgelegd hoe u de id-provider toevoegt aan een naamruimte of relying party-toepassing. Als u deze taak wilt uitvoeren, kunt u de ACS-beheerservice gebruiken. De Beheerservice is met name handig wanneer u een aangepaste gebruikersinterface bouwt voor het beheren van ACS en bij het automatiseren van het toevoegen van nieuwe tenants voor SaaS-oplossingen (Software as a Service).
Inhoud
Doelen
Overzicht
Samenvatting van de stappen
Stap 1: configuratiegegevens verzamelen
Stap 2: Verwijzingen toevoegen aan de vereiste services en assembly's
Stap 3: de beheerserviceproxy implementeren
Stap 4: een id-provider toevoegen
Stap 5: Uw werk testen
Doelen
Identificeer de vereisten en configuratiegegevens.
Vermeld de vereiste stappen.
Controleer of de configuratie is geslaagd.
Overzicht
De ACS Management Service is een webservice die ACS-functies beschikbaar maakt voor code. De ACS Management Service heeft toegang tot alle ACS-functies, inclusief de functiesubset die beschikbaar is in de gebruikersinterface van de ACS-beheerportal.
Door Microsoft als id-provider toe te voegen aan ACS, kunt u de investering die is gemaakt in bedrijfsidentiteitsbeheer opnieuw gebruiken voor cloudoplossingen. Als u wilt configureren als id-provider, moet u code schrijven die specifieke stappen volgt. In dit onderwerp worden deze basisstappen beschreven.
Samenvatting van de stappen
Stap 1: configuratiegegevens verzamelen
Stap 2: Verwijzingen toevoegen aan de vereiste services en assembly's
Stap 3: de beheerserviceproxy implementeren
Stap 4: een id-provider toevoegen
Stap 5: Uw werk testen
Stap 1: configuratiegegevens verzamelen
In deze stap wordt uitgelegd hoe u de vereiste configuratiegegevens verzamelt. U moet de volgende informatie verzamelen:
Gebruikersnaam van beheerservice-id. De standaardwaarde is ManagementClient.
Identiteitswachtwoord voor beheerservice.
Naamruimtenaam.
ACS-hostnaam: accesscontrol.windows.net
Tekenreeks voor handtekeningcertificaat: haal de tekenreeks van het AD FS-handtekeningcertificaat op uit uw implementatie.
Gebruik de volgende procedure om de gebruikersnaam en het wachtwoord van de Management Service-identiteit te vinden.
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 en selecteer vervolgens een beheerservice, zoals ManagementClient.
De waarde van het veld Naam is de gebruikersnaam van de Management Service-identiteit.
Klik in de sectie Referenties op Wachtwoord. De waarde in het wachtwoordveld is het identiteitswachtwoord van de Management Service.
Nadat u de vereiste gegevens hebt verzameld, volgt u deze stappen om een voorbeeldconsoletoepassing te maken waarmee de code wordt uitgevoerd om toe te voegen als id-provider:
Startmenu Visual Studio en maak een nieuw consoletoepassingsproject.
Wijs in de klasse Program de configuratiegegevenswaarden toe aan variabelen met modulebereik. In het volgende codevoorbeeld ziet u hoe dit kan worden gedaan.
static string serviceIdentityUsernameForManagement = "ManagementClient"; static string serviceIdentityPasswordForManagement = "ManagementClientPasswordValue"; static string serviceNamespace = "MyNameSpaceNoDots"; static string acsHostName = "accesscontrol.windows.net"; static string signingCertificate = "Very long string representing ADFS signing certificate"; static string cachedSwtToken; static string identityProviderName = "My Other ADFS Identity Provider";
Stap 2: Verwijzingen toevoegen aan de vereiste services en assembly's
Deze stap identificeert en voegt de vereiste afhankelijkheden toe aan de services en assembly's.
De vereiste afhankelijkheden toevoegen aan de services en assembly's
Voeg een verwijzing toe naar System.Web.Extensions.
Voeg een servicereferentie 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.
using System.Web; using System.Net; using System.Data.Services.Client; using System.Collections.Specialized; using System.Web.Script.Serialization;
Stap 3: de beheerserviceproxy implementeren
Met deze stap maakt u een methode die de implementatie van de Management Service-proxy inkapselt.
De managementserviceproxy implementeren
Voeg de volgende methode toe aan de klasse Program.
public static ManagementService CreateManagementServiceClient() { string managementServiceHead = "v2/mgmt/service/"; string managementServiceEndpoint = string.Format("https://{0}.{1}/{2}", serviceNamespace, acsHostName, managementServiceHead); ManagementService managementService = new ManagementService(new Uri(managementServiceEndpoint)); managementService.SendingRequest += GetTokenWithWritePermission; return managementService; }
Implementeer de methode GetTokenWithWritePermission en de bijbehorende helpermethoden. Hiermee wordt het SWT OAuth-token toegevoegd 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, string.Format("OAuth {0}", cachedSwtToken)); } private static string GetTokenFromACS() { // request a token from ACS WebClient client = new WebClient(); client.BaseAddress = string.Format("https://{0}.{1}", serviceNamespace, acsHostName); NameValueCollection values = new NameValueCollection(); values.Add("grant_type", "password"); values.Add("client_id", serviceIdentityUsernameForManagement); values.Add("username", serviceIdentityUsernameForManagement); values.Add("client_secret", serviceIdentityPasswordForManagement); values.Add("password", serviceIdentityPasswordForManagement); byte[] responseBytes = client.UploadValues("/v2/OAuth2-13/rp/AccessControlManagement", "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 4: een id-provider toevoegen
Deze stap wordt toegevoegd als een id-provider met behulp van de Management Service-proxy die u eerder hebt gemaakt.
AD FS 2.0 toevoegen als id-provider
Initialiseer de beheerserviceproxy.
ManagementService svc = CreateManagementServiceClient();
Voeg uw id-provider toe als de verlener.
Issuer issuer = new Issuer { Name = identityProviderName }; svc.AddToIssuers(issuer); svc.SaveChanges(SaveChangesOptions.Batch);
Maak een id-provider.
IdentityProvider identityProvider = new IdentityProvider() { DisplayName = identityProviderName, Description = identityProviderName, WebSSOProtocolType = "WsFederation", IssuerId = issuer.Id }; svc.AddObject("IdentityProviders", identityProvider);
Maak een handtekeningsleutel van de id-provider op basis van het certificaat dat u eerder hebt verkregen.
IdentityProviderKey identityProviderKey = new IdentityProviderKey() { DisplayName = "SampleIdentityProviderKeyDisplayName", Type = "X509Certificate", Usage = "Signing", Value = Convert.FromBase64String(signingCertificate), IdentityProvider = identityProvider, StartDate = startDate, EndDate = endDate, }; svc.AddRelatedObject(identityProvider, "IdentityProviderKeys", identityProviderKey);
Werk het aanmeldingsadres van de id-provider bij.
IdentityProviderAddress realm = new IdentityProviderAddress() { Address = "http://SampleIdentityProvider.com/sign-in/", EndpointType = "SignIn", IdentityProvider = identityProvider, }; svc.AddRelatedObject(identityProvider, "IdentityProviderAddresses", realm); svc.SaveChanges(SaveChangesOptions.Batch);
Maak de id-provider beschikbaar voor relying party's, met uitzondering van de beheerservice.
foreach (RelyingParty rp in svc.RelyingParties) { // skip the built-in management RP. if (rp.Name != "AccessControlManagement") { svc.AddToRelyingPartyIdentityProviders(new RelyingPartyIdentityProvider() { IdentityProviderId = identityProvider.Id, RelyingPartyId = rp.Id }); } } svc.SaveChanges(SaveChangesOptions.Batch);
Stap 5: Uw werk testen
Uw werk testen
Klik op de pagina Access Control Service op de koppeling Regelgroepen in de sectie Vertrouwensrelaties.
Klik op een van de beschikbare regels.
Klik op de pagina Regelgroep bewerken op de koppeling Regel toevoegen .
Kies op de pagina Claimregel toevoegen de zojuist toegevoegde id-provider in de vervolgkeuzelijst in de sectie Claimverlener .
Laat de rest van de standaardwaarden staan.
Klik op Opslaan.
U hebt zojuist een passthrough-regel voor de id-provider gemaakt.