Freigeben über


Vorgehensweise: Verwenden des ACS-Verwaltungsdiensts zum Konfigurieren von Facebook als Internet Identity Provider

Aktualisiert: 19. Juni 2015

Gilt für: Azure

Gilt für

  • Microsoft® Azure™ Access Control Service (ACS)

  • Facebook

Zusammenfassung

In diesem Thema werden die grundlegenden Schritte zum Hinzufügen von Facebook als Identitätsanbieter beschrieben. Facebook kann mit dem ACS-Verwaltungsportal als Identitätsanbieter hinzugefügt werden, oder es kann mit dem ACS-Verwaltungsdienst automatisiert werden. Das Arbeiten mit dem Verwaltungsdienst ist z. B. in Szenarien nützlich, wenn Sie eine benutzerdefinierte Benutzeroberfläche zum Verwalten von ACS erstellen oder wenn Sie das Onboarding eines neuen Mandanten für multimandanten Software as a Service -Lösungen (SaaS) automatisieren.

Inhalte

  • Ziele

  • Übersicht

  • Zusammenfassung von Schritten

  • Schritt 1 – Erfassen von Konfigurationsinformationen

  • Schritt 2 – Hinzufügen von Verweisen zu den erforderlichen Diensten und Assemblys

  • Schritt 3 – Implementieren des Verwaltungsdienstproxys

  • Schritt 4 – Hinzufügen eines Identitätsanbieters

  • Schritt 5 – Testen der Lösung

Ziele

  • Identifizieren der erforderlichen Voraussetzungen und Konfigurationsinformationen.

  • Auflisten der zum Hinzufügen von Facebook als Identitätsanbieter erforderlichen Schritte.

  • Testen des Erfolgs der Konfiguration.

Übersicht

Verwaltungsdienst ist ein Webdienst, der eine der wichtigsten Komponenten von ACS ist. Der Verwaltungsdienst stellt Funktionen zur Verfügung, die über die Verwaltungsportal-Benutzerschnittstelle zur Verfügung gestellt werden. Alle Aktionen, die im Verwaltungsportal ausgeführt werden können, können auch mithilfe des Verwaltungsdiensts ausgeführt werden. Das Hinzufügen von Facebook als Identitätsanbieter zu ACS ermöglicht es Ihnen, den Identitätsverwaltungsmechanismus der Internetskala zu entwickeln und zu verwalten. Sie müssen Code erstellen, der bestimmte Schritte berücksichtigt, um Facebook als Identitätsanbieter konfigurieren zu können. In diesem Thema werden diese grundlegenden Schritte beschrieben.

Zusammenfassung von Schritten

  • Schritt 1 – Erfassen von Konfigurationsinformationen

  • Schritt 2 – Hinzufügen von Verweisen zu den erforderlichen Diensten und Assemblys

  • Schritt 3 – Implementieren des Verwaltungsdienstproxys

  • Schritt 4 – Hinzufügen eines Identitätsanbieters

  • Schritt 5 – Testen der Lösung

Schritt 1 – Erfassen von Konfigurationsinformationen

In diesem Schritt werden die erforderlichen Konfigurationsinformationen identifiziert und deren Erfassung erläutert. Sie müssen die folgenden Informationen erfassen:

  • Benutzername der VerwaltungsdienstidentitätManagementClient.

  • Kennwort der Verwaltungsdienstidentität – Gehen Sie folgendermaßen vor, um das Kennwort der Dienstidentität für den Verwaltungsdienst abzurufen:

    1. Melden Sie sich beim Access Control Service-Verwaltungsportal an.

    2. Klicken Sie im Abschnitt Verwaltung auf den Link Verwaltungsdienst.

    3. Klicken Sie auf der Seite Verwaltungsdienst auf den Link ManagementClient (ManagementClient ist der tatsächliche Benutzername für den Dienst).

    4. Klicken Sie im Abschnitt Anmeldeinformationen auf den Link Symmetrischer Schlüssel oder Kennwort. Der Wert ist in beiden Links identisch. Dies ist das Kennwort.

  • Der Namespace Ihres Diensts.

  • ACS-Hostname – Normalerweise accesscontrol.windows.net.

  • Facebook-Anwendungs-ID und Anwendungsschlüssel – Folgen Sie den Anweisungen in der Vorgehensweise: Konfigurieren von Facebook als Identitätsanbieter.

Nachdem Sie die erforderlichen Informationen erfasst haben, führen Sie die folgenden Schritte aus, um eine Beispielkonsolenanwendung zu erstellen, die den Code zum Hinzufügen von Facebook als Identitätsanbieter ausführt:

  1. Öffnen Sie Visual Studio® 2010, und erstellen Sie dann ein neues Konsolenanwendungsprojekt.

  2. Weisen Sie den Modulbereichsvariablen in der Klasse Program die zuvor erfassten Informationen mithilfe von Code zu, der dem folgenden ähnelt.

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";

Schritt 2 – Hinzufügen von Verweisen zu den erforderlichen Diensten und Assemblys

In diesem Schritt werden die erforderlichen Abhängigkeiten identifiziert und den Diensten und Assemblys hinzugefügt.

So fügen Sie die erforderlichen Abhängigkeiten den Diensten und Assemblys hinzu

  1. Fügen Sie einen Verweis auf System.Web.Extensions hinzu.

  2. Fügen Sie dem Verwaltungsdienst einen Dienstverweis hinzu. Die Verwaltungsdienst-URL ist für Ihren Namespace eindeutig und ähnelt der folgenden URL:

    https:// YOURNAMESPACE.accesscontrol.windows.net/v2/mgmt/service

  3. Fügen Sie die folgenden Deklarationen hinzu.

    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;
    

Beachten Sie die letzte Deklaration ConsoleApplication1.ServiceReference1. Diese kann in Ihrem Fall anders lauten, wenn Sie beim Erstellen Ihrer Konsolenanwendung oder beim Hinzufügen des Verweises für den Verwaltungsdienst Standardeinstellungen geändert haben.

Schritt 3 – Implementieren des Verwaltungsdienstproxys

In diesem Schritt wird eine Methode erstellt, die die Implementierung des Verwaltungsdienstproxys verkapselt.

So implementieren Sie den Verwaltungsdienstproxy

  1. Fügen Sie der Program-Klasse die folgende Methode hinzu.

    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. Implementieren Sie die Methode GetTokenWithWritePermission und deren Hilfsmethoden. Auf diese Weise wird das SWT OAuth-Token des Autorisierungsheaders der HTTP-Anforderung hinzugefügt.

    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;
    
            }
    
    

Schritt 4 – Hinzufügen eines Identitätsanbieters

In diesem Schritt wird Facebook als Identitätsanbieter mithilfe des zuvor erstellten Verwaltungsdienstproxys hinzugefügt.

So fügen Sie Facebook als Identitätsanbieter hinzu

  1. Initialisieren Sie den Verwaltungsdienstproxy mithilfe der Methode Main.

    ManagementService svc = CreateManagementServiceClient();
    
  2. Fügen Sie Ihren Identitätsanbieter als Aussteller hinzu.

    Issuer issuer = new Issuer
    {
       Name = identityProviderName + “-” + facebookAppId
    };
    svc.AddToIssuers(issuer);
    svc.SaveChanges(SaveChangesOptions.Batch);
    
  3. Erstellen Sie einen Identitätsanbieter.

    var facebook = new IdentityProvider
    {
        DisplayName = identityProviderName,
        LoginLinkName = "Facebook",
        LoginParameters = "email",
        WebSSOProtocolType = "Facebook",
        IssuerId = issuer.Id
    };
    
    svc.AddObject("IdentityProviders", facebook);
    
  4. Erstellen Sie einen Identitätsanbieter-Signaturschlüssel, der auf dem zuvor abgerufenen Zertifikat basiert.

    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. Stellen Sie den Identitätsanbieter für die vertrauende Seite mit Ausnahme des Verwaltungsdiensts bereit.

    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);
    

Schritt 5 – Testen der Lösung

So testen Sie die Lösung

  1. Melden Sie sich beim Access Control Service-Verwaltungsportal an.

  2. Klicken Sie auf der Seite Zugriffssteuerungsdienst im Abschnitt Vertrauensstellungen auf den Link Regelgruppen.

  3. Klicken Sie auf eine der verfügbaren Regeln.

  4. Klicken Sie auf der Seite Regelgruppe bearbeiten auf den Link Regel hinzufügen.

  5. Wählen Sie auf der Seite Anspruchsregel hinzufügen den neu hinzugefügten Identitätsanbieter aus der Dropdownliste im Abschnitt Anspruchsherausgeber aus.

  6. Behalten Sie die restlichen Standardwerte bei.

  7. Klicken Sie auf Speichern.

Sie haben soeben eine Pass-Through-Regel für den Identitätsanbieter erstellt.