Share via


Procedure: ACS Management Service gebruiken om Facebook te configureren als een internetprovider

Bijgewerkt: 19 juni 2015

Van toepassing op: Azure

Van toepassing op

  • Microsoft® Azure™ Access Control Service (ACS)

  • Facebook

Samenvatting

In dit onderwerp worden de basisstappen beschreven die nodig zijn voor het toevoegen van Facebook als id-provider. Facebook kan worden toegevoegd als id-provider aan ACS met behulp van de beheerportal of kan worden geautomatiseerd met de ACS-beheerservice. Werken met de beheerservice is bijvoorbeeld handig in scenario's waarin u een aangepaste gebruikersinterface bouwt voor het beheren van ACS of bij het automatiseren van de onboarding van een nieuwe tenant voor SaaS-oplossingen (MultiTenant 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 vereiste vereisten en configuratiegegevens.

  • Vermeld de stappen die nodig zijn om Facebook toe te voegen als id-provider.

  • Test of de configuratie is geslaagd.

Overzicht

Management Service 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 Facebook toe te voegen als id-provider aan ACS, kunt u besparen op het ontwikkelen en onderhouden van het mechanisme voor identiteitsbeheer op internetschaal. Als u de taak van het configureren van Facebook als id-provider wilt uitvoeren, moet u code schrijven 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 beheerserviceproxy implementeren

  • Stap 4: een id-provider toevoegen

  • Stap 5: Uw werk testen

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.

  • Facebook-toepassings-id en toepassingsgeheim: Volg de instructies in How to: Configure Facebook as an Identity Provider.

Nadat u de vereiste gegevens hebt verzameld, volgt u deze stappen om een voorbeeldconsoletoepassing te maken waarmee de code wordt uitgevoerd voor het toevoegen van Facebook als 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 = "My Password for my ManagementClient";

static string serviceNamespace = "MyNameSpaceNoDots";
static string acsHostName = "accesscontrol.windows.net";
static string acsManagementServicesRelativeUrl = "v2/mgmt/service/";


static string cachedSwtToken;
static string identityProviderName = "Facebook";

static string facebookAppId = "Your Facebook AppID";
static string facebookAppSecret = "Your Facebook Secret";

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;
    

Zoals u ziet, kan de laatste declaratie ConsoleApplication1.ServiceReference1 verschillen in uw geval als u de standaardwaarden hebt gewijzigd bij het maken van uw consoletoepassing of bij het toevoegen van de verwijzing naar de beheerservice.

Stap 3: de beheerserviceproxy implementeren

Met deze stap maakt u een methode die de implementatie van de Management Service-proxy inkapselt.

De Management Service-proxy 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 Facebook toegevoegd als id-provider met behulp van de Management Service-proxy die u eerder hebt gemaakt.

Facebook toevoegen als id-provider

  1. Initialiseer in de main-methode de Beheerserviceproxy.

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

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

    var facebook = new IdentityProvider
    {
        DisplayName = identityProviderName,
        LoginLinkName = "Facebook",
        LoginParameters = "email",
        WebSSOProtocolType = "Facebook",
        IssuerId = issuer.Id
    };
    
    svc.AddObject("IdentityProviders", facebook);
    
  4. Maak een ondertekeningssleutel van een id-provider op basis van het certificaat dat u eerder hebt verkregen.

    var facebookKeys = new[]
        {
            new IdentityProviderKey
                {
                    IdentityProvider = facebook,
                    StartDate = DateTime.UtcNow,
                    EndDate = DateTime.UtcNow.AddYears(1),
                    Type = "ApplicationKey",
                    Usage = "ApplicationId",
                    Value = Encoding.UTF8.GetBytes(facebookAppId)
                },
            new IdentityProviderKey
                {
                    IdentityProvider = facebook,
                    StartDate = DateTime.UtcNow,
                    EndDate = DateTime.UtcNow.AddYears(1),
                    Type = "ApplicationKey",
                    Usage = "ApplicationSecret",
                    Value = Encoding.UTF8.GetBytes(facebookAppSecret)
                }
        };
    
    foreach (var key in facebookKeys)
    {
        svc.AddRelatedObject(facebook, "IdentityProviderKeys", key);
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
  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 = facebook.Id,
                RelyingPartyId = rp.Id
            });
        }
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    

Stap 5: Uw werk testen

Uw werk testen

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

  2. Klik op de pagina Access Control Service op de koppeling Regelgroepen in de sectie Vertrouwensrelaties.

  3. Klik op een van de beschikbare regels.

  4. Klik op de pagina Regelgroep bewerken op de koppeling Regel toevoegen .

  5. Kies op de pagina Claimregel toevoegen de zojuist toegevoegde id-provider in de vervolgkeuzelijst in de sectie Claimverlener .

  6. Laat de rest van de standaardwaarden staan.

  7. Klik op Opslaan.

U hebt zojuist een passthrough-regel voor de id-provider gemaakt.