Diese Dokumentation wurde archiviert und wird nicht länger gepflegt.

Vorgehensweise: Verwenden des ACS-Verwaltungsdiensts zum Konfigurieren von Dienstidentitäten

Veröffentlicht: April 2011

Letzte Aktualisierung: Juni 2015

Betrifft: Azure

  • Zugriffssteuerung für Microsoft Azure Active Directory (auch Zugriffssteuerungsdienst oder ACS)

Sie können ACS-Dienstidentitäten mithilfe des ACS-Verwaltungsportals (weitere Informationen finden Sie unter Dienstidentitäten) oder mithilfe des ACS-Verwaltungsdiensts konfigurieren. Die Verwendung des ACS-Verwaltungsdiensts kann effizienter sein, wenn Sie eine benutzerdefinierte Benutzerschnittstelle für die Verwaltung von ACS erstellen oder die Aufnahme eines neuen Mandanten für SaaS-Lösungen (Software as a Service, Software als Dienst) mit mehreren Mandanten automatisieren möchten.

ImportantWichtig
Bevor Sie die folgenden Schritte ausführen, stellen Sie sicher, dass Ihr System alle .NET Framework- und Plattformvoraussetzungen erfüllt, die unter ACS-Voraussetzungen zusammengefasst werden.

Führen Sie die folgenden Schritte aus, um Dienstidentitäten mithilfe des ACS-Verwaltungsdiensts zu konfigurieren:

Sie können das ACS-Verwaltungsportal zum Erfassen der erforderlichen Konfigurationsinformationen verwenden. Weitere Informationen zum Starten des ACS-Verwaltungsportals finden Sie unter ACS-Verwaltungsportal.

  1. Starten Sie das ACS-Verwaltungsportal. Weitere Informationen zum Starten des ACS-Verwaltungsportals finden Sie unter ACS-Verwaltungsportal.

  2. Rufen Sie den Wert des ACS-Verwaltungsdienstkontos ab. Sie können das Standardkonto ManagementClient verwenden. Klicken Sie im ACS-Verwaltungsportal in der Struktur auf der linken Seite im Abschnitt Verwaltung auf Verwaltungsdienst, um diesen Wert anzuzeigen.

  3. Rufen Sie den Wert des Kennworts für das ACS-Verwaltungsdienstkonto ab. Gehen Sie wie folgt vor, um diesen Wert anzuzeigen:

    1. Klicken Sie im ACS-Verwaltungsportal in der Struktur auf der linken Seite im Abschnitt Verwaltung auf Verwaltungsdienst.

    2. Klicken Sie auf der Seite Verwaltungsdienst unter Verwaltungsdienstkonten auf ManagementClient.

    3. Klicken Sie auf der Seite Verwaltungsdienstkonto bearbeiten unter Anmeldeinformationen auf Kennwort.

    4. Kopieren Sie auf der Seite Verwaltungsanmeldeinformationen bearbeiten den Wert im Feld Kennwort.

  4. Rufen Sie den Wert Ihres Azure-Namespace ab. Sie können diesen Wert aus dem Azure-Portal oder aus der URL Ihres ACS-Verwaltungsportals abrufen. In http://contoso.accesscontrol.windows.net ist der Wert des Azure-Namespace z. B. contoso.

  5. Rufen Sie den Wert des ACS-Hostnamens ab. Normalerweise lautet dieser accesscontrol.windows.net.

In diesem Schritt erstellen Sie eine Konsolenbeispielanwendung, die den Code zum Hinzufügen der ACS-Dienstidentitäten ausführen kann.

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

  2. Fügen Sie der Klasse Program den folgenden Code hinzu, und weisen Sie dann die Variablen serviceIdentityPasswordForManagement, serviceNamespace und acsHostName den entsprechenden Konfigurationsinformationen zu, die Sie im vorherigen Schritt erfasst haben.

    public const string serviceIdentityUsernameForManagement = "ManagementClient";
    public const string serviceIdentityPasswordForManagement = "My Password/Key for ManagementClient";
    public const string serviceNamespace = "MyNameSpaceNoDots";
    public const string acsHostName = "accesscontrol.windows.net";
    public const string acsManagementServicesRelativeUrl = "v2/mgmt/service/";
    static string cachedSwtToken;
    
    

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

  1. Klicken Sie mit der rechten Maustaste auf Verweise, klicken Sie auf Verweis hinzufügen, und fügen Sie dann einen Verweis auf System.Web.Extensions hinzu.

    noteHinweis
    Ggf. müssen Sie in Projektmappen-Explorer mit der rechten Maustaste auf den Namen Ihrer Konsolenbeispielanwendung klicken, Eigenschaften auswählen, und dann das Zielframework Ihrer Beispielanwendung von .NET Framework 4-Clientprofil (dieser Wert wird standardmäßig zugewiesen, wenn Sie eine neue Konsolenanwendung erstellen) in .NET Framework 4 ändern.

  2. Klicken Sie mit der rechten Maustaste auf Dienstverweise, klicken Sie auf Dienstverweis hinzufügen, und fügen Sie dem Verwaltungsdienst dann 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. Dabei ist MyConsoleApplication der Name Ihrer Konsolenanwendung und MyServiceReference der Name Ihres Dienstverweises:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    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.Security.Cryptography;
    using System.Security.Cryptography.X509Certificates;
    using MyConsoleApplication.MyServiceReference;
    
    

In diesem Schritt implementieren Sie den Verwaltungsdienstclient.

  1. Fügen Sie der Klasse Program 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. Fügen Sie der Klasse Program den folgenden Code hinzu, um die Methode GetTokenWithWritePermission und deren Hilfsmethoden zu erstellen. GetTokenWithWritePermission und deren Hilfsmethoden fügen das SWT OAuth-Token des Autorisierungsheaders der HTTP-Anforderung hinzu.

    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 fügen Sie eine Dienstidentität mithilfe des Verwaltungsdienstclients hinzu, den Sie in einem der vorherigen Schritte erstellt haben. Eine ACS-Dienstidentität kann ein Kennwort, einen symmetrischen Schlüssel oder ein X.509-Zertifikat als Anmeldeinformationentyp verwenden.

  1. Initialisieren Sie den Verwaltungsdienstclient, indem Sie der Methode Main in der Klasse Program den folgenden Code hinzufügen:

    ManagementService svc = CreateManagementServiceClient();
    
    
  2. Nehmen Sie eine der folgenden Aktionen vor:

    • Fügen Sie der Methode Main der Klasse Program den folgenden Code hinzu, um eine Dienstidentität hinzuzufügen, der ein Kennwort zugeordnet ist, und die Änderungen zu speichern:

      noteHinweis
      Sie können diese Dienstidentität "SampleServiceIdentity" nennen und ihr Kennwort auf "SampleServiceIdentityPassword" festlegen, wie im Code unten gezeigt.

      
                  string name = "SampleServiceIdentity";
                  string password = "SampleServiceIdentityPassword";
                  ServiceIdentity sid = new ServiceIdentity()
                  {
                      Name = name
                  };
      
                  DateTime startDate, endDate;
                  startDate = DateTime.UtcNow;
                  endDate = DateTime.MaxValue;
      
                  ServiceIdentityKey key = new ServiceIdentityKey()
                  {
                      EndDate = endDate.ToUniversalTime(),
                      StartDate = startDate.ToUniversalTime(),
                      Type = "Password",
                      Usage = "Password",
                      Value = Encoding.UTF8.GetBytes(password),
                      DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Password", name)
                  };
      
                  svc.AddToServiceIdentities(sid);
                  svc.AddRelatedObject(
                      sid,
                      "ServiceIdentityKeys",
                      key);
      
      
                  svc.SaveChanges(SaveChangesOptions.Batch);
      
      
    • Fügen Sie der Methode Main der Klasse Program den folgenden Code hinzu, um eine Dienstidentität hinzuzufügen, der ein symmetrischer Schlüssel zugeordnet ist, und die Änderungen zu speichern:

      noteHinweis
      Sie können diese Dienstidentität "SampleServiceIdentity" nennen und ihren Wert für den symmetrischen Schlüssel auf "SampleServiceIdentityPassword" festlegen, wie im Code unten gezeigt.

      
                  string name = "SampleServiceIdentity";
                  string symKey = "SampleServiceIdentitySymmetricKey";
                  ServiceIdentity sid = new ServiceIdentity()
                  {
                      Name = name
                  };
      
                  DateTime startDate, endDate;
                  startDate = DateTime.UtcNow;
                  endDate = DateTime.MaxValue;
      
                  ServiceIdentityKey key = new ServiceIdentityKey()
                  {
                      EndDate = endDate.ToUniversalTime(),
                      StartDate = startDate.ToUniversalTime(),
                      Type = "Symmetric",
                      Usage = "Signing",
                      Value = Convert.FromBase64String(symKey),
                      DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Sym Key", name)
                  };
      
                  svc.AddToServiceIdentities(sid);
                  svc.AddRelatedObject(
                      sid,
                      "ServiceIdentityKeys",
                      key);
      
      
                  svc.SaveChanges(SaveChangesOptions.Batch);
      
      
    • Fügen Sie der Methode Main der Klasse Program den folgenden Code hinzu, um eine Dienstidentität hinzuzufügen, der ein X.509-Zertifikat zugeordnet ist, und die Änderungen zu speichern:

      noteHinweis
      Sie können diese Dienstidentität SampleServiceIdentity nennen, wie im Code unten gezeigt.

      Ersetzen Sie im Code unten "Full path to your .CER file" durch den vollqualifizierten Pfad zu Ihrem X.509-Zertifikat. Wenn ein Zertifikat namens "ACS2ClientCertificate.cer" z. B. unter "C:\" gespeichert wird, lautet der richtige Wert "C:\ACS2ClientCertificate.cer".

      
                  string name = "SampleServiceIdentity";
                  X509Certificate2 cert = new X509Certificate2(@"Full path to your .CER file");
      
                  ServiceIdentity sid = new ServiceIdentity()
                  {
                      Name = name
                  };
      
                  DateTime startDate, endDate;
      
                  startDate = cert.NotBefore.ToUniversalTime();
                  endDate = cert.NotAfter.ToUniversalTime();
      
                  ServiceIdentityKey key = new ServiceIdentityKey()
                  {
                      EndDate = endDate.ToUniversalTime(),
                      StartDate = startDate.ToUniversalTime(),
                      Type = "X509Certificate",
                      Usage = "Signing",
                      Value = cert.GetRawCertData(),
                      DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Cert", name)
                  };
      
                  svc.AddToServiceIdentities(sid);
                  svc.AddRelatedObject(
                      sid,
                      "ServiceIdentityKeys",
                      key);
      
      
                  svc.SaveChanges(SaveChangesOptions.Batch);
      
      

Siehe auch

Anzeigen: