Freigeben über


Vorgehensweise: Verwenden des ACS-Verwaltungsdiensts zum Konfigurieren von AD FS 2.0 als Enterprise Identitätsanbieter

Aktualisiert: 19. Juni 2015

Gilt für: Azure

Gilt für

  • Microsoft® Azure™ Access Control Service (ACS)

  • Microsoft Active Directory®-Verbunddienste 2.0 (Active Directory Federation Services, AD FS)

Zusammenfassung

In diesem Thema wird erläutert, wie Sie dem Identitätsanbieter einen Namespace oder eine vertrauende Parteianwendung hinzufügen. Um diese Aufgabe auszuführen, können Sie den ACS-Verwaltungsdienst ausführen. Der Verwaltungsdienst ist besonders nützlich, wenn Sie eine benutzerdefinierte Benutzeroberfläche zum Verwalten von ACS erstellen und beim Automatisieren der Ergänzung neuer 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 Anforderungen und Konfigurationsinformationen.

  • Auflisten der erforderlichen Schritte.

  • Überprüfen des Erfolgs der Konfiguration.

Übersicht

Der ACS-Verwaltungsdienst ist ein Webdienst, der ACS-Features für Code verfügbar macht. Der ACS-Verwaltungsdienst kann auf alle ACS-Features zugreifen, einschließlich der Featureuntermenge, die in der ACS-Verwaltungsportal-Benutzeroberfläche verfügbar ist.

Durch das Hinzufügen von Microsoft als Identitätsanbieter zu ACS können Sie die Investitionen in die Unternehmensidentitätsverwaltung für cloudbasierte Lösungen wiederverwenden. Um als Identitätsanbieter zu konfigurieren, müssen Sie Code schreiben, der bestimmten Schritten folgt. 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 wird erläutert, wie die erforderlichen Konfigurationsinformationen erfasst werden. Sie müssen die folgenden Informationen erfassen:

  • Benutzername der Verwaltungsdienstidentität. Der Standardwert ist ManagementClient.

  • Kennwort der Verwaltungsdienstidentität.

  • Namespacename.

  • ACS-Hostname: accesscontrol.windows.net

  • Signaturzertifikatzeichenfolge: Rufen Sie die AD FS-Signaturzertifikatzeichenfolge aus Ihrer Bereitstellung ab.

Verwenden Sie das folgende Verfahren, um den Benutzernamen und das Kennwort für die Verwaltungsdienstidentität zu ermitteln.

  1. Wechseln Sie zum Microsoft Azure Verwaltungsportal (https://manage.WindowsAzure.com), melden Sie sich an, und klicken Sie dann auf Active Directory. (Problembehandlungstipps: Das Element "Active Directory" fehlt oder nicht verfügbar) Um einen Access Control Namespace zu verwalten, wählen Sie den Namespace aus, und klicken Sie dann auf "Verwalten". (Oder klicken Sie auf Namespaces für die Zugriffssteuerung, wählen Sie den Namespace aus und klicken Sie dann auf Verwalten.)

  2. Klicken Sie auf Verwaltungsdienst, und wählen Sie dann einen Verwaltungsdienst aus, z. B. ManagementClient.

  3. Der Wert des Felds "Name " ist der Benutzername des Verwaltungsdiensts.

  4. Klicken Sie im Bereich Anmeldeinformationen auf Kennwort. Der Wert für das Kennwortfeld ist Kennwort der Verwaltungsdienstidentität.

Führen Sie nach dem Sammeln der erforderlichen Informationen die folgenden Schritte aus, um eine Beispielkonsolenanwendung zu erstellen, die den Code ausführt, der als Identitätsanbieter hinzugefügt werden soll:

  1. Starten Sie Visual Studio, und erstellen Sie ein neues Konsolenanwendungsprojekt.

  2. Weisen Sie die Konfigurationsinformationswerte in der Klasse Program zu Variablen des Modulbereichs zu. Das folgende Codebeispiel zeigt eine mögliche Vorgehensweise.

    static string serviceIdentityUsernameForManagement = "ManagementClient";
    static string serviceIdentityPasswordForManagement = "ManagementClientPasswordValue";
    
    static string serviceNamespace = "MyNameSpaceNoDots";
    static string acsHostName = "accesscontrol.windows.net";
    
    static string signingCertificate = "Very long string representing ADFS signing certificate";
    
    static string cachedSwtToken;
    static string identityProviderName = "My Other ADFS Identity Provider";
    

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;
    

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 managementServiceHead = "v2/mgmt/service/";
                string managementServiceEndpoint = 
    string.Format("https://{0}.{1}/{2}", 
    serviceNamespace, 
    acsHostName, 
    managementServiceHead);
                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, 
     string.Format("OAuth {0}", 
     cachedSwtToken));
            }
    
            private static string GetTokenFromACS()
            {
                // request a token from ACS
                WebClient client = new WebClient();
                client.BaseAddress = string.Format("https://{0}.{1}", 
          serviceNamespace, 
          acsHostName);
    
                NameValueCollection values = new NameValueCollection();
    
                values.Add("grant_type", "password");
                values.Add("client_id", serviceIdentityUsernameForManagement);
                values.Add("username", serviceIdentityUsernameForManagement);
                values.Add("client_secret", serviceIdentityPasswordForManagement);
                values.Add("password", serviceIdentityPasswordForManagement);
    
                byte[] responseBytes = 
    client.UploadValues("/v2/OAuth2-13/rp/AccessControlManagement", 
          "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

Dieser Schritt fügt einen Identitätsanbieter mithilfe des zuvor erstellten Verwaltungsdienstproxys hinzu.

So fügen Sie AD FS 2.0 als Identitätsanbieter hinzu

  1. Initialisieren Sie den Verwaltungsdienstproxy.

    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.

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

    IdentityProviderKey identityProviderKey = new IdentityProviderKey()
    {
        DisplayName = "SampleIdentityProviderKeyDisplayName",
        Type = "X509Certificate",
        Usage = "Signing",
        Value = Convert.FromBase64String(signingCertificate),
        IdentityProvider = identityProvider,
        StartDate = startDate,
        EndDate = endDate,
    };
          svc.AddRelatedObject(identityProvider, 
    "IdentityProviderKeys", 
    identityProviderKey);
    
  5. Aktualisieren Sie die Anmeldeadresse des Identitätsanbieters.

    IdentityProviderAddress realm = new IdentityProviderAddress()
    {
        Address = "http://SampleIdentityProvider.com/sign-in/",
        EndpointType = "SignIn",
        IdentityProvider = identityProvider,
    };
    svc.AddRelatedObject(identityProvider, "IdentityProviderAddresses", realm);
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
  6. 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 = identityProvider.Id,
                RelyingPartyId = rp.Id
            });
        }
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    

Schritt 5 – Testen der Lösung

So testen Sie die Lösung

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

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

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

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

  5. Behalten Sie die restlichen Standardwerte bei.

  6. Klicken Sie auf Speichern.

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