Share via


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:

    1. Meld u aan bij de Access Control Service Management-portal.

    2. Klik in de sectie Beheer op de koppeling Beheerservice .

    3. Klik op de pagina Beheerservice op de koppeling ManagementClient (ManagementClient is de werkelijke gebruikersnaam voor de service).

    4. 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:

  1. Open Visual Studio ® 2010 en maak een nieuw consoletoepassingsproject.

  2. 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

  1. Voeg een verwijzing toe naar System.Web.Extensions.

  2. 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

  3. 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

  1. 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;
            }
    
  2. 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

  1. Initialiseer de Management Service-client in de Main-methode.

    ManagementService svc = CreateManagementServiceClient();
    
  2. Voeg uw id-provider toe als de verlener.

                Issuer issuer = new Issuer
                {
                    Name = identityProviderName
                };
                svc.AddToIssuers(issuer);
                svc.SaveChanges(SaveChangesOptions.Batch);
    
  3. Maak een id-provider.

                var openId = new IdentityProvider
                {
                    DisplayName = identityProviderName,
                    Description = identityProviderName,
                    WebSSOProtocolType = "OpenId",
                    IssuerId = issuer.Id
                };
    
                svc.AddObject("IdentityProviders", openId);
    
  4. 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();
    
  5. 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);