Procedure: ACS Management Service gebruiken om een OpenID-id-provider te configureren
Bijgewerkt: 19 juni 2015
Van toepassing op: Azure
Van toepassing op
Microsoft® Azure™ Access Control Service (ACS)
OpenID 2.0
Samenvatting
In dit onderwerp worden de basisstappen beschreven die nodig zijn voor het toevoegen van id-providers die ondersteuning bieden voor het OpenID-protocol. OpenID-id-providers kunnen worden toegevoegd aan ACS met behulp van de Beheerservice. OpenID-id-providers kunnen niet worden toegevoegd met behulp van de ACS-beheerportal. In dit onderwerp verwijzen we naar de OpenID 2.0-specificatie, omdat dit de specificatieversie is die ACS ondersteunt.
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 Beheerserviceclient implementeren
Stap 4: een id-provider toevoegen
Doelen
Identificeer de vereiste vereisten en configuratiegegevens.
Vermeld de stappen die nodig zijn om een OpenID-id-provider toe te voegen.
Overzicht
De beheerservice is een webservice die een van de belangrijkste onderdelen van ACS is. De beheerservice biedt functionaliteit die beschikbaar is via de gebruikersinterface van de beheerportal. Alles wat u in de beheerportal kunt doen, kunt u ook doen met behulp van de beheerservice. Door ACS openID-id-providers toe te voegen, kunt u besparen op het ontwikkelen en onderhouden van het mechanisme voor identiteitsbeheer op internetschaal. Als u de taak van het toevoegen van een OpenID-id-provider wilt uitvoeren, schrijft u code die volgt op specifieke stappen. 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 Beheerserviceclient implementeren
Stap 4: een id-provider toevoegen
Stap 1: configuratiegegevens verzamelen
Deze stap identificeert en laat zien hoe u de vereiste configuratiegegevens verzamelt. U moet de volgende informatie verzamelen:
Gebruikersnaam voor beheerservice-identiteit: ManagementClient.
Identiteitswachtwoord voor beheerservice: als u het wachtwoord voor de service-id voor de beheerservice wilt ophalen:
Meld u aan bij de Access Control Service Management-portal.
Klik in de sectie Beheer op de koppeling Beheerservice .
Klik op de pagina Beheerservice op de koppeling ManagementClient (ManagementClient is de werkelijke gebruikersnaam voor de service).
Klik in de sectie Referenties op de symmetrische sleutel of de koppeling Wachtwoord . De waarde in elk is hetzelfde. Dit is het wachtwoord.
De naamruimte van uw service
ACS-hostnaam: meestal accesscontrol.windows.net.
Nadat u de vereiste informatie hebt verzameld, volgt u deze stappen om een voorbeeldconsoletoepassing te maken waarmee de code wordt uitgevoerd voor het toevoegen van openID-id-provider:
Open Visual Studio ® 2010 en maak een nieuw consoletoepassingsproject.
Wijs in de klasse Program de eerder verzamelde gegevens toe aan de modulebereikvariabelen, met behulp van code die vergelijkbaar is met de volgende.
static string serviceIdentityUsernameForManagement = "ManagementClient";
static string serviceIdentityPasswordForManagement = "...update to your password...";
static string serviceNamespace = "...update to your namespace...";
static string acsHostName = "accesscontrol.windows.net";
static string acsManagementServicesRelativeUrl = "v2/mgmt/service/";
static string identityProviderName = "My Open ID Identity Provider";
static string cachedSwtToken;
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 managementservice 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; using System.Globalization; using System.Runtime.Serialization.Json; using ConsoleApplication1.ServiceReference1;
Let op de laatste declaratie , ConsoleApplication1.ServiceReference1. Dit kan variëren in uw geval als u de standaardwaarden hebt gewijzigd bij het maken van uw consoletoepassing of wanneer u de verwijzing naar de beheerservice hebt toegevoegd.
Stap 3: de Beheerserviceclient implementeren
Met deze stap maakt u een methode die de implementatie van de Management Service-client inkapselt.
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; }
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, "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 4: een id-provider toevoegen
Met deze stap wordt een OpenID-id-provider toegevoegd met behulp van de Management Service-client die u eerder hebt gemaakt.
Een OpenID-id-provider toevoegen
Initialiseer de Management Service-client in de Main-methode.
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.
var openId = new IdentityProvider { DisplayName = identityProviderName, Description = identityProviderName, WebSSOProtocolType = "OpenId", IssuerId = issuer.Id }; svc.AddObject("IdentityProviders", openId);
Werk het aanmeldingsadres van de id-provider bij. In deze oefening gebruikt u www.myopenid.com als aanmeldingsadres. Andere OpenID-id-providers zijn Google en Yahoo!, en ze hebben hun eigen aanmeldingsadressen. Ze zijn https://www.google.com/accounts/o8/ud respectievelijk en https://open.login.yahooapis.com/openid/op/auth, respectievelijk.
var openIdAddress = new IdentityProviderAddress { Address = "https://www.myopenid.com/server", EndpointType = "SignIn" }; svc.AddRelatedObject(openId, "IdentityProviderAddresses", openIdAddress); svc.SaveChanges();
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 = openId.Id, RelyingPartyId = rp.Id }); } } svc.SaveChanges(SaveChangesOptions.Batch);