Exportieren (0) Drucken
Alle erweitern
Erweitern Minimieren

Vorgehensweise: Verwenden des ACS-Verwaltungsdiensts zum Konfigurieren eines OpenID-Internetidentitätsanbieters

Veröffentlicht: April 2011

Letzte Aktualisierung: März 2015

Betrifft: Azure

  • Microsoft® Azure™ Access Control Service (ACS)

  • OpenID 2.0

In diesem Thema werden die grundlegenden Schritte zum Hinzufügen von Identitätsanbieter beschrieben, die das OpenID-Protokoll unterstützen. OpenID-Identitätsanbieter können ACS mithilfe des Verwaltungsdiensts hinzugefügt werden. OpenID-Identitätsanbieter können nicht mithilfe des ACS-Verwaltungsportals hinzugefügt werden. In diesem Thema wird die OpenID 2.0-Spezifikation behandelt, weil dies die Spezifikationsversion ist, die ACS unterstützt.

  • Ziele

  • Überblick

  • Zusammenfassung der Schritte

  • Schritt 1 – Erfassen von Konfigurationsinformationen

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

  • Schritt 3 – Implementieren des Verwaltungsdienstclients

  • Schritt 4 – Hinzufügen eines Identitätsanbieters

  • Identifizieren der erforderlichen Voraussetzungen und Konfigurationsinformationen.

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

Der Verwaltungsdienst ist ein Webdienst und stellt eine der Schlüsselkomponenten von ACS dar. 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. Wenn Sie OpenID-Identitätsanbieter hinzufügen, können Sie sich durch ACS die Entwicklung und Verwaltung des Identitätsverwaltungsmechanismus im Internetformat ersparen. Sie müssen Code erstellen, der bestimmte Schritte berücksichtigt, um einen OpenID-Identitätsanbieter hinzufügen zu können. In diesem Thema werden diese grundlegenden Schritte beschrieben.

  • Schritt 1 – Erfassen von Konfigurationsinformationen

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

  • Schritt 3 – Implementieren des Verwaltungsdienstclients

  • Schritt 4 – Hinzufügen eines Identitätsanbieters

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 am Verwaltungsportal des Zugriffssteuerungsdiensts (http://go.microsoft.com/fwlink/?LinkID=129428) 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.

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 des OpenID-Identitätsanbieters 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 = "...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;


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

  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://IHRNAMESPACE.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.

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

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

In diesem Schritt wird ein OpenID-Identitätsanbieter mithilfe des zuvor erstellten Verwaltungsdienstclients hinzugefügt.

  1. Initialisieren Sie die Methode Main, und initialisieren Sie dann den Verwaltungsdienstclient.

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

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

                var openId = new IdentityProvider
                {
                    DisplayName = identityProviderName,
                    Description = identityProviderName,
                    WebSSOProtocolType = "OpenId",
                    IssuerId = issuer.Id
                };
    
                svc.AddObject("IdentityProviders", openId);
    
    
    
  4. Aktualisieren Sie die Anmeldeadresse des Identitätsanbieters. In dieser Übung verwenden Sie www.myopenid.com als Anmeldeadresse. Andere OpenID-Identitätsanbieter sind z. B. Google und Yahoo!. Diese Anbieter verfügen über eigene Anmeldeadressen. Diese lauten https://www.google.com/accounts/o8/ud bzw. https://open.login.yahooapis.com/openid/op/auth.

                var openIdAddress = new IdentityProviderAddress
                {
                    Address = "https://www.myopenid.com/server",
                    EndpointType = "SignIn"
                };
    
                svc.AddRelatedObject(openId, "IdentityProviderAddresses", openIdAddress);
                svc.SaveChanges();
    
    
    
  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 = openId.Id,
                            RelyingPartyId = rp.Id
                        });
                    }
                }
    
                svc.SaveChanges(SaveChangesOptions.Batch);
    
    
    

Community-Beiträge

HINZUFÜGEN
Anzeigen:
© 2015 Microsoft