Freigeben über


Vorgehensweise: Verwenden des ACS-Verwaltungsdiensts zum Konfigurieren von Zertifikaten und Schlüsseln

Aktualisiert: 19. Juni 2015

Gilt für: Azure

Gilt für

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

Übersicht

Sie können ACS-Zertifikate und Schlüssel mithilfe des ACS-Verwaltungsportals oder des ACS-Verwaltungsdiensts konfigurieren. Das Arbeiten mit dem ACS-Verwaltungsdienst kann effizienter sein, 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 möchten.

Weitere Informationen zum Verwenden des ACS-Verwaltungsportals zum Konfigurieren von Zertifikaten und Schlüsseln finden Sie unter Zertifikate und Schlüssel.

Schritte zum Konfigurieren von Zertifikaten und Schlüsseln mithilfe des ACS-Verwaltungsdiensts

Wichtig

Stellen Sie vor der Ausführung der folgenden Schritte sicher, dass Ihr System alle .NET Framework- und Plattformanforderungen erfüllt, die in ACS-Voraussetzungen zusammengefasst sind.

Führen Sie die folgenden Schritte aus, um Zertifikate und Schlüssel mithilfe des ACS-Verwaltungsdiensts zu konfigurieren:

  • Schritt 1 – Erfassen der ACS-Konfigurationsinformationen

  • Schritt 2 – Erstellen einer Konsolenbeispielanwendung

  • Schritt 3 – Hinzufügen von Verweisen auf die erforderlichen Dienste und Assemblys

  • Schritt 4 – Implementieren des Verwaltungsdienstclients

  • Schritt 5 – Installieren von Zertifikaten und Schlüsseln

    • Hinzufügen eines Tokensignaturzertifikats für Ihren Zugriffssteuerungs-Namespace

    • Hinzufügen eines Tokensignaturzertifikats für eine Anwendung der vertrauenden Seite

    • Hinzufügen eines symmetrischen Tokensignaturschlüssels für Ihren Zugriffssteuerungs-Namespace

    • Hinzufügen eines symmetrischen Tokensignaturschlüssels für eine Anwendung der vertrauenden Seite

    • Hinzufügen eines Tokenverschlüsselungszertifikats

    • Hinzufügen eines Tokenentschlüsselungszertifikats

Schritt 1 – Erfassen der ACS-Konfigurationsinformationen

Sie können das ACS-Verwaltungsportal verwenden, um die erforderlichen Konfigurationsinformationen zu sammeln. Weitere Informationen finden Sie im ACS-Verwaltungsportal.

So erfassen Sie ACS-Konfigurationsinformationen

  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)

  2. Um einen Namespace für die Zugriffssteuerung 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.)

  3. Klicken Sie auf Verwaltungsdienst, Verwaltungsclient, und klicken Sie dann auf Kennwort.

  4. Kopieren Sie den Wert in das Feld Kennwort.

  5. Klicken Sie auf Verwaltungsdienst. Rufen Sie den Wert Ihres Dienstnamespaces und den ACS-Hostnamen ab. Wenn Ihre Verwaltungsdienst-URL lautet, isthttp://contoso.accesscontrol.windows.net der Namespace contoso und der Hostname accesscontrol.windows.net.

Schritt 2 – Erstellen einer Konsolenbeispielanwendung

In diesem Schritt erstellen Sie eine Beispielkonsolenanwendung, die den Code zum Hinzufügen Ihrer ACS-Regelgruppen und -regeln ausführen kann.

So erstellen Sie eine Konsolenbeispielanwendung

  1. Öffnen Sie Visual Studio 2012, und erstellen Sie ein neues Konsolenanwendungsprojekt unter der Windows installierten Vorlage.

  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;
    

Schritt 3 – Hinzufügen von Verweisen auf die erforderlichen Dienste und Assemblys

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

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

  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.

    Hinweis

    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:// YOURNAMESPACE.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.IO;
    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;
    

Schritt 4 – Implementieren des Verwaltungsdienstclients

In diesem Schritt implementieren Sie den Verwaltungsdienstclient.

So implementieren Sie den Verwaltungsdienstclient

  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. Fügen Sie die Methode GetTokenWithWritePermission und deren Hilfsmethoden der Klasse Program hinzu. 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;
    
            }
    

Schritt 5 – Hinzufügen von Zertifikaten und Schlüsseln

Hinzufügen eines Tokensignaturzertifikats für Ihren Access Control Namespace

In diesem Beispiel erstellen Sie ein X.509-Signaturzertifikat für Ihren Access Control Namespace.

So fügen Sie ein Tokensignaturzertifikat für alle vertrauenden Parteianwendungen im Access Control Namespace hinzu

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

    ManagementService svc = CreateManagementServiceClient();
    
  2. Erstellen Sie eine ReadBytesFromPfxFile-Hilfsfunktion , um Bytes aus Ihrem X.509-Zertifikat zu lesen, indem Sie den folgenden Code zur Programmklasse hinzufügen:

    //Helper function to read bytes from your .pfx file
    
            public static byte[] ReadBytesFromPfxFile(string pfxFileName, string protectionPassword)
            {
                byte[] signingCertificate;
                using (FileStream stream = File.OpenRead(pfxFileName))
                {
                    using (BinaryReader br = new BinaryReader(stream))
                    {
                        signingCertificate = br.ReadBytes((int)stream.Length);
                    }
                }
                return signingCertificate;
            }
    
  3. Fügen Sie der Methode Main in der Klasse Program den folgenden Code hinzu, um ein X.509-Tokensignaturzertifikat hinzuzufügen:

    Hinweis

    Ersetzen Sie "Full path to your .PFX file" durch den gültigen vollständigen Pfad zu Ihrem X.509-Zertifikat. Beispiel: "C:\ ACS2ClientCertificate.pfx".

    Ersetzen Sie "MyCertificatePassword" durch das Kennwort für Ihr X.509-Zertifikat.

    X509Certificate2 cert = new X509Certificate2(@"Full path to your .PFX file", “MyCertificatePassword”);
    
                DateTime startDate, endDate;
                startDate = cert.NotBefore.ToUniversalTime();
                endDate = cert.NotAfter.ToUniversalTime();
               string pfxFileName = @"Full path to your .PFX file";
                string pfxPassword = @"MyCertificatePassword";
    
    byte[] signingCertificate = ReadBytesFromPfxFile(pfxFileName, pfxPassword);
    
    ServiceKey serviceKey = new ServiceKey()
                {
                    Type = "X509Certificate",
                    Usage = "Signing",
                    Value = signingCertificate,
                      Password = Encoding.UTF8.GetBytes("MyCertificatePassword"),
                      IsPrimary = false,
                    StartDate = startDate.ToUniversalTime(),
                    EndDate = endDate.ToUniversalTime()
                };
                svc.AddToServiceKeys(serviceKey);
                svc.SaveChanges(SaveChangesOptions.Batch);
    

Hinzufügen eines Tokensignaturzertifikats für eine Anwendung der vertrauenden Seite

In diesem Beispiel erstellen Sie ein X.509-Signaturzertifikat, das einer bestimmten Anwendung der vertrauenden Seite zugewiesen wird.

Hinzufügen eines Tokensignaturzertifikats für eine Anwendung der vertrauenden Seite

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

    ManagementService svc = CreateManagementServiceClient();
    
  2. Erstellen Sie eine Hilfsfunktion ReadBytesFromPfxFile, die Bytes aus dem X.509-Zertifikat liest, indem Sie der Klasse Program den folgenden Code hinzufügen:

    //Helper function to read bytes from your .pfx file
    
            public static byte[] ReadBytesFromPfxFile(string pfxFileName, string protectionPassword)
            {
                byte[] signingCertificate;
                using (FileStream stream = File.OpenRead(pfxFileName))
                {
                    using (BinaryReader br = new BinaryReader(stream))
                    {
                        signingCertificate = br.ReadBytes((int)stream.Length);
                    }
                }
                return signingCertificate;
            }
    
  3. Fügen Sie der Methode Main in der Klasse Program den folgenden Code hinzu, um ein X.509-Tokensignaturzertifikat hinzuzufügen:

    Hinweis

    Ersetzen Sie "Full path to your .PFX file" durch den vollständigen Pfad zu Ihrem X.509-Zertifikat. Beispiel: "C:\ ACS2ClientCertificate.pfx".

    Ersetzen Sie "MyCertificatePassword" durch das Kennwort für Ihr X.509-Zertifikat.

    Ersetzen Sie "MyRelyingPartyApplication" durch den Namen der Anwendung der vertrauenden Seite.

    //Select an existing Relying Party Application by its name
    
                RelyingParty relyingParty = svc.RelyingParties.Where(m => m.Name == "MyRelyingPartyApplication").Single();
    
               // Add a signing certificate
    
               X509Certificate2 cert = new X509Certificate2(@"Full path to your .PFX file", "MyCertificatePassword");
               DateTime startDate, endDate;
               startDate = cert.NotBefore.ToUniversalTime();
               endDate = cert.NotAfter.ToUniversalTime();
    
               string pfxFileName = @"Full path to your .PFX file";
               string pfxPassword = "MyCertificatePassword";
    
                byte[] signingCertificate = ReadBytesFromPfxFile(pfxFileName, pfxPassword);
    
               RelyingPartyKey relyingPartyKey = new RelyingPartyKey()
                {
                    StartDate = startDate.ToUniversalTime(),
                   EndDate = endDate.ToUniversalTime(),
                    Type = "X509Certificate",
                    Usage = "Signing",
                    IsPrimary = true,
                    Value = signingCertificate,
                   Password = Encoding.UTF8.GetBytes("MyCertificatePassword")
                };
    
    // Add the new signing certificate to the selected Relying Party Application
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyKeys", relyingPartyKey);
    
    
    
                //Save your relying party application
    
                svc.SaveChanges(SaveChangesOptions.Batch);
    

Hinzufügen eines Tokensignatur-Symmetric-Schlüssels für Ihren Access Control Namespace

In diesem Beispiel weisen Sie diesem Signierungssymmetrieschlüssel Ihren Access Control Namespace zu.

So fügen Sie einen symmetrischen Tokensignaturschlüssel für Ihren Access Control Namespace hinzu

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

    ManagementService svc = CreateManagementServiceClient();
    
  2. Fügen Sie der Methode Main in der Klasse Program den folgenden Code hinzu, um einen symmetrischen Tokensignaturschlüssel hinzuzufügen:

           string symKey = "SampleTokenSigningSymmetricKey";
                DateTime startDate, endDate;
                startDate = DateTime.UtcNow;
                endDate = DateTime.MaxValue;
    
                ServiceKey serviceKey = new ServiceKey()
                {
                    
                    Type = "Symmetric",
                    Usage = "Signing",
                    Value = Encoding.UTF8.GetBytes(symKey),
                    StartDate = startDate.ToUniversalTime(),
                    EndDate = endDate.ToUniversalTime()
                };
                svc.AddToServiceKeys(serviceKey);
                svc.SaveChanges(SaveChangesOptions.Batch);
    

Hinzufügen eines symmetrischen Tokensignaturschlüssels für eine Anwendung der vertrauenden Seite

In diesem Beispiel weisen Sie Ihren neuen symmetrischen Tokensignaturschlüssel einer bestimmten Anwendung der vertrauenden Seite zu.

So fügen Sie einen symmetrischen Tokensignaturschlüssel für eine Anwendung der vertrauenden Seite hinzu

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

    ManagementService svc = CreateManagementServiceClient();
    
  2. Fügen Sie der Methode Main in der Klasse Program den folgenden Code hinzu, um einen symmetrischen Tokensignaturschlüssel hinzuzufügen:

          //Select a relying party application
    
                RelyingParty relyingParty = svc.RelyingParties.Where(m => m.Name == "MyRelyingPartyApplication").Single();
    
               // Create a symmetric key
    
                string symKey = "SampleTokenSigningSymmetricKey";
                DateTime startDate, endDate;
                startDate = DateTime.UtcNow;
                endDate = DateTime.MaxValue;
    
                RelyingPartyKey relyingPartyKey = new RelyingPartyKey()
                {
    
                    Type = "Symmetric",
                    Usage = "Signing",
                    Value = Encoding.UTF8.GetBytes(symKey),
                    StartDate = startDate.ToUniversalTime(),
                    EndDate = endDate.ToUniversalTime()
                };
    
                //Assign this symmetric key to the selected relying party application 
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyKeys", relyingPartyKey);
    
                   //Save your symmetric key
    
                svc.SaveChanges(SaveChangesOptions.Batch);        
    

Hinzufügen eines Tokenverschlüsselungszertifikats

In diesem Beispiel fügen Sie ein X.509-Tokenverschlüsselungszertifikat für eine bestimmte Anwendung der vertrauenden Seite hinzu.

So fügen Sie ein Tokenverschlüsselungszertifikat für eine Anwendung der vertrauenden Seite hinzu

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

    ManagementService svc = CreateManagementServiceClient();
    
  2. Fügen Sie der Methode Main in der Klasse Program den folgenden Code hinzu, um ein X.509-Tokenverschlüsselungszertifikat hinzuzufügen:

    Hinweis

    Ersetzen Sie "Full path to your .CER file" durch den vollständigen Pfad zu einem X.509-Zertifikat. Beispiel: "C:\ ACS2ClientCertificate.cer".

    Ersetzen Sie "MyCertificatePassword" durch das Kennwort für das X.509-Zertifikat.

    Ersetzen Sie "MyRelyingPartyApplication" durch den Namen einer Anwendung der vertrauenden Seite.

    //Select a relying party application
    
                RelyingParty relyingParty = svc.RelyingParties.Where(m => m.Name == "MyRelyingPartyApplication").Single();
    
               // Add an encryption certificate
    
                X509Certificate2 cert = new X509Certificate2(@"Full path to your .CER file");
                DateTime startDate, endDate; 
                  startDate = cert.NotBefore;
                  endDate = cert.NotAfter;
    
                RelyingPartyKey relyingPartyKey = new RelyingPartyKey()
                {
                    Type = "X509Certificate",
                    Usage = "Encrypting",
                    Value = cert.GetRawCertData(),
                    StartDate = startDate.ToUniversalTime(),
                    EndDate = endDate.ToUniversalTime()
                };
    
                //Assign this encryption certificate to the selected relying party application 
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyKeys", relyingPartyKey);
    
                   //Save your encryption certificate
    
                svc.SaveChanges(SaveChangesOptions.Batch);     
    

Hinzufügen eines Tokenentschlüsselungszertifikats

In diesem Beispiel fügen Sie ihrem Access Control Namespace ein X.509-Tokenschlüsselungszertifikat hinzu.

So fügen Sie ein Tokensignaturzertifikat für alle Anwendungen von vertrauenden Parteien im Access Control Namespace hinzu

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

    ManagementService svc = CreateManagementServiceClient();
    
  2. Erstellen Sie eine Hilfsfunktion ReadBytesFromPfxFile, die Bytes aus dem X.509-Zertifikat liest, indem Sie der Klasse Program den folgenden Code hinzufügen:

    //Helper function to read bytes from your .pfx file
    
            public static byte[] ReadBytesFromPfxFile(string pfxFileName, string protectionPassword)
            {
                byte[] decryptionCertificate;
                using (FileStream stream = File.OpenRead(pfxFileName))
                {
                    using (BinaryReader br = new BinaryReader(stream))
                    {
                        decryptionCertificate = br.ReadBytes((int)stream.Length);
                    }
                }
                return decryptingCertificate;
            }
    
  3. Fügen Sie der Methode Main in der Klasse Program den folgenden Code hinzu, um ein X.509-Tokensignaturzertifikat hinzuzufügen:

    Hinweis

    Ersetzen Sie "Full path to your .PFX file" im Code unten durch den gültigen vollständigen Pfad zu Ihrem X.509-Zertifikat. Wenn beispielsweise ein Zertifikat namens ACS2ClientCertificate.pfx unter C:gespeichert wird, lautet der richtige Wert "C:\ ACS2ClientCertificate.pfx".

    Ersetzen Sie "MyCertificatePassword" im Code unten durch das richtige Kennwort für Ihr X.509-Zertifikat.

    X509Certificate2 cert = new X509Certificate2(@"Full path to your .PFX file", “MyCertificatePassword”);
    
                DateTime startDate, endDate;
                startDate = cert.NotBefore.ToUniversalTime();
                endDate = cert.NotAfter.ToUniversalTime();
               string pfxFileName = @"Full path to your .PFX file";
                string pfxPassword = @"MyCertificatePassword";
    
    byte[] decryptionCertificate = ReadBytesFromPfxFile(pfxFileName, pfxPassword);
    
    ServiceKey serviceKey = new ServiceKey()
                {
                    Type = "X509Certificate",
                    Usage = "Encrypting",
                    Value = decryptionCertificate,
                      Password = Encoding.UTF8.GetBytes("MyCertificatePassword"),
                    StartDate = startDate.ToUniversalTime(),
                    EndDate = endDate.ToUniversalTime()
                };
                svc.AddToServiceKeys(serviceKey);
                svc.SaveChanges(SaveChangesOptions.Batch);
    

Weitere Informationen

Konzepte

ACS – Vorgehensweisen