Compartir a través de


Cómo: Usar el servicio de administración de ACS para configurar certificados y claves

Actualizado: 19 de junio de 2015

Se aplica a: Azure

Se aplica a

  • Active Directory Access Control de Microsoft Azure (también conocido como Access Control Service o ACS)

Información general

Puede configurar certificados y claves de ACS mediante el Portal de administración de ACS o el servicio de administración de ACS. Trabajar con el servicio de administración de ACS puede ser más eficaz si va a crear una interfaz de usuario personalizada para administrar ACS o si desea automatizar la incorporación de un nuevo inquilino para soluciones de software como servicio (SaaS) multiinquilino.

Para obtener más información sobre el uso del Portal de administración de ACS para configurar certificados y claves, consulte Certificados y claves.

Pasos para configurar certificados y claves mediante el Servicio de administración de ACS

Importante

Antes de realizar los pasos siguientes, asegúrese de que el sistema cumple todos los requisitos de .NET Framework y plataforma que se resumen en Requisitos previos de ACS.

Para configurar certificados y claves mediante el servicio de administración de ACS, complete los pasos siguientes:

  • Paso 1: Recopilación de información de configuración de ACS

  • Paso 2: Creación de una aplicación de consola de ejemplo

  • Paso 3: Agregar referencias a los servicios y ensamblados necesarios

  • Paso 4: Implementar el cliente del servicio de administración

  • Paso 5: Instalación de certificados y claves

    • Agregar un certificado de firma de tokens para el espacio de nombres del Control de acceso

    • Agregar un certificado de firma de tokens para una aplicación de usuario de confianza

    • Agregar una clave simétrica de firma de tokens para el espacio de nombres del Control de acceso

    • Agregar una clave simétrica de firma de tokens para una aplicación de usuario de confianza

    • Agregar un certificado de cifrado de tokens

    • Agregar un certificado de descifrado de tokens

Paso 1: Recopilación de información de configuración de ACS

Puede usar el Portal de administración de ACS para recopilar la información de configuración necesaria. Para obtener más información, consulte Portal de administración de ACS.

Para recopilar la información de configuración de ACS

  1. Vaya al Portal de administración de Microsoft Azure (https://manage.WindowsAzure.com), inicie sesión y, a continuación, haga clic en Active Directory. (Sugerencia de solución de problemas: falta el elemento "Active Directory" o no está disponible)

  2. Para administrar el espacio de nombres Access Control, seleccione el espacio de nombres y, a continuación, haga clic en Administrar. (O haga clic en espacios de nombres Access Control, seleccione el espacio de nombres y, a continuación, haga clic en Administrar.)

  3. Haga clic en elServicio de administración, en ManagementClienty, a continuación, en Contraseña.

  4. Copie el valor del campo Contraseña.

  5. Haga clic en Servicio de administración. Obtenga el valor del espacio de nombres del servicio y el nombre de host de ACS. Si la dirección URL del servicio de administración es http://contoso.accesscontrol.windows.net, el espacio de nombres es contoso y el nombre de host se accesscontrol.windows.net.

Paso 2: Creación de una aplicación de consola de ejemplo

En este paso, creará una aplicación de consola de ejemplo que puede ejecutar el código para agregar los grupos de reglas y reglas de ACS.

Para crear una aplicación de consola de ejemplo

  1. Abra Visual Studio 2012 y cree un nuevo proyecto de aplicación de consola en la plantilla Windows instalada.

  2. Agregue el código siguiente a la clase Program y luego asigne las variables serviceIdentityPasswordForManagement, serviceNamespace y acsHostName a la información de configuración correspondiente que recopiló en el paso anterior.

    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;
    

Paso 3: Agregar referencias a los servicios y ensamblados necesarios

En este paso, deberá identificar y agregar las dependencias necesarias de los servicios y ensamblados.

Para agregar las dependencias necesarias a los servicios y ensamblados

  1. Haga clic con el botón secundario en Referencias, haga clic en Agregar referencia y agregue una referencia a System.Web.Extensions.

    Nota

    Es posible que tenga que hacer clic con el botón secundario en el nombre de la aplicación de consola de ejemplo en el Explorador de soluciones, seleccionar Propiedades y cambiar el marco de destino de su aplicación de ejemplo del Perfil de cliente de .NET Framework 4 (asignado de forma predeterminada al crear una nueva aplicación de consola) a .NET Framework 4.

  2. Haga clic con el botón secundario en Referencias al servicio, haga clic en Agregar referencia de servicio y agregue una referencia de servicio al Servicio de administración. La dirección URL del servicio de administración es única a su espacio de nombres y es similar a la siguiente:

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

  3. Agregue las declaraciones siguientes, donde MyConsoleApplication corresponde al nombre de la aplicación de consola y MyServiceReference es el nombre de su referencia de servicio:

    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;
    

Paso 4: Implementar el cliente del servicio de administración

En este paso se implementa el cliente del servicio de administración.

Para implementar el cliente de servicio de administración

  1. Agregue el método siguiente a la clase Program :

       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. Agregue el método GetTokenWithWritePermission y sus métodos del asistente a la clase Program. El método GetTokenWithWritePermission y sus asistentes agregan el token SWT OAuth al encabezado Authorization de la solicitud HTTP.

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

Paso 5: Agregar certificados y claves

Agregar un certificado de firma de tokens para el espacio de nombres Access Control

En este ejemplo, creará un certificado de firma X.509 para el espacio de nombres Access Control.

Para agregar un certificado de firma de tokens para todas las aplicaciones de usuario de confianza en el espacio de nombres Access Control

  1. Inicie el cliente del servicio de administración. Para ello, agregue el código siguiente al método Main de la clase Program:

    ManagementService svc = CreateManagementServiceClient();
    
  2. Cree una función auxiliar ReadBytesFromPfxFile para leer bytes del certificado X.509 agregando el código siguiente a la clase Program :

    //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. Para agregar un certificado X.509 de firma, agregue el código siguiente al método Main de la clase Program:

    Nota

    Reemplace “Ruta de acceso completa a su archivo .PFX” con la ruta de acceso completa válida a un certificado X.509. Por ejemplo, "C:\ ACS2ClientCertificate.pfx".

    Reemplace "MyCertificatePassword" con la contraseña para el certificado X.509.

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

Agregar un certificado de firma de tokens para una aplicación de usuario de confianza

En este ejemplo, se crea un certificado de firma X.509 que se asigna a una determinada aplicación de usuario de confianza.

Cómo agregar un certificado de firma de tokens para una aplicación de usuario de confianza

  1. Inicie el cliente del servicio de administración. Para ello, agregue el código siguiente al método Main de la clase Program:

    ManagementService svc = CreateManagementServiceClient();
    
  2. Cree una función del asistente ReadBytesFromPfxFile para leer los bytes de su certificado X.509. Para ello, agregue el código siguiente a la clase Program:

    //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. Para agregar un certificado X.509 de firma, agregue el código siguiente al método Main de la clase Program:

    Nota

    Reemplace “Ruta de acceso completa a su archivo .PFX” con la ruta de acceso completa a un certificado X.509. Por ejemplo, "C:\ ACS2ClientCertificate.pfx".

    Reemplace "MyCertificatePassword" con la contraseña para el certificado X.509.

    Reemplace "MyRelyingPartyApplication" con el nombre de la aplicación de usuario de confianza.

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

Agregar una clave simétrica de firma de tokens para el espacio de nombres Access Control

En este ejemplo, asignará esta clave simétrica de firma al espacio de nombres Access Control.

Para agregar una clave simétrica de firma de tokens para el espacio de nombres Access Control

  1. Inicie el cliente del servicio de administración. Para ello, agregue el código siguiente al método Main de la clase Program:

    ManagementService svc = CreateManagementServiceClient();
    
  2. Para agregar una clave simétrica de firma de tokens, agregue el código siguiente al método Main de la clase Program:

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

Agregar una clave simétrica de firma de tokens para una aplicación de usuario de confianza

En este ejemplo, se asigna la nueva clave simétrica de firma a una determinada aplicación de usuario de confianza.

Para agregar una clave simétrica de firma de tokens para una aplicación de usuario de confianza

  1. Inicie el cliente del servicio de administración. Para ello, agregue el código siguiente al método Main de la clase Program:

    ManagementService svc = CreateManagementServiceClient();
    
  2. Para agregar una clave simétrica de firma de tokens, agregue el código siguiente al método Main de la clase Program:

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

Agregar un certificado de cifrado de tokens

En este ejemplo, se agrega un certificado de cifrado de tokens X.509 para una determinada aplicación de usuario de confianza.

Para agregar un certificado de cifrado de tokens para una aplicación de usuario de confianza.

  1. Inicie el cliente del servicio de administración. Para ello, agregue el código siguiente al método Main de la clase Program:

    ManagementService svc = CreateManagementServiceClient();
    
  2. Para agregar un certificado X.509 de cifrado de tokens, agregue el código siguiente al método Main de la clase Program:

    Nota

    Reemplace “Ruta de acceso completa a su archivo .CER” con la ruta de acceso completa a un certificado X.509. Por ejemplo, "C:\ ACS2ClientCertificate.cer".

    Reemplace “MyCertificatePassword” con la contraseña para el certificado X.509.

    Reemplace “MyRelyingPartyApplication” con el nombre de una aplicación de usuario de confianza.

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

Agregar un certificado de descifrado de tokens

En este ejemplo, agregará un certificado de descifrado de tokens X.509 asignado al espacio de nombres Access Control.

Para agregar un certificado de firma de tokens para todas las aplicaciones de usuario autenticado en el espacio de nombres Access Control

  1. Inicie el cliente del servicio de administración. Para ello, agregue el código siguiente al método Main de la clase Program:

    ManagementService svc = CreateManagementServiceClient();
    
  2. Cree una función del asistente ReadBytesFromPfxFile para leer los bytes de su certificado X.509. Para ello, agregue el código siguiente a la clase Program:

    //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. Para agregar un certificado X.509 de firma, agregue el código siguiente al método Main de la clase Program:

    Nota

    Sustituya la cadena "Full path to your .PFX file" del código con la ruta de acceso completa válida de su certificado X.509. Por ejemplo, si se guarda un certificado llamado ACS2ClientCertificate.pfx en C:, el valor correcto es "C:\ ACS2ClientCertificate.pfx".

    Sustituya la cadena “MyCertificatePassword” del código con la contraseña correcta del certificado X.509.

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

Consulte también

Conceptos

Procedimientos de ACS