Exportar (0) Imprimir
Expandir todo
Expandir Minimizar

Procedimiento: Usar servicio de administración de ACS para configurar claves y certificados

Publicada: abril de 2011

Actualizado: febrero de 2014

Se aplica a: Azure

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

Puede configurar certificados y claves de ACS usando el portal de administración de ACS (para obtener más información, vea Certificados y claves) o el servicio de administración de ACS. Trabajar con el servicio de administración de ACS puede resultar más eficaz si va a crear una interfaz de usuario personalizada para administrar ACS o si desea automatizar la integración de una nueva empresa para soluciones de software alojado como servicio (SaaS).

Puede usar el portal de administración de ACS para recopilar la información de configuración necesaria. Para obtener más información sobre cómo iniciar el portal de administración de ACS, vea Portal de administración de ACS.

  1. Inicie el portal de administración de ACS. Para obtener más información sobre cómo iniciar el portal de administración de ACS, vea Portal de administración de ACS.

  2. Obtenga el valor de la cuenta del servicio de administración de ACS. Puede usar la cuenta predeterminada ManagementClient. Para ver este valor, en el portal de administración de ACS, haga clic en Servicio de administración en la sección Administración del árbol que aparece a la izquierda de la página.

  3. Obtenga el valor de la contraseña de cuenta del servicio de administración de ACS. Para ver este valor, haga lo siguiente:

    1. En el portal de administración de ACS, haga clic en Servicio de administración en la sección Administración del árbol que aparece a la izquierda de la página.

    2. En la página Servicio de administración, haga clic en ManagementClient en Cuentas del servicio de administración.

    3. En la página Editar cuenta del servicio de administración, en Credenciales, haga clic en Contraseña.

    4. En la página Editar consola de administración, copie el valor en el campo Contraseña.

  4. Obtenga el valor del espacio de nombres de servicio de Windows Azure AppFabric. Puede obtener este valor del portal de Windows Azure AppFabric o del URL del portal de administración de ACS. Por ejemplo, en http://contoso.accesscontrol.windows.net, el valor del espacio de nombres de servicio es contoso.

  5. Obtenga el valor del nombre de host de ACS. Normalmente, es accesscontrol.windows.net.

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

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

  2. Agregue el código siguiente a la clase Programa y, a continuación, asigne las variables serviceIdentityPasswordForManagement, serviceNamespace y acsHostName a la información de configuración correspondiente que haya recopilado 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;
    
    

En este paso, se identifican y agregan las dependencias requeridas para 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.

    noteNota
    Es posible que tenga que hacer clic con el botón secundario en el nombre de la aplicación de la consola de ejemplo en el Explorador de soluciones, seleccionar Propiedades y cambiar el marco de trabajo de destino de su aplicación de muestra de .NET Framework 4 Client Profile (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 de 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 exclusiva para su espacio de nombres y tiene un aspecto similar al siguiente:

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

  3. Agregue las declaraciones siguientes, donde MyConsoleApplication es el nombre de la aplicación de consola y MyServiceReference es el nombre de la referencia del 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;
    
    

En este paso, implementará el cliente de servicio de administración.

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

       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 de ayudante a la clase Programa. GetTokenWithWritePermission y sus ayudantes agregan el token SWT OAuth al encabezado de autorización 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;
    
            }
    
    
    

En este ejemplo, cree un certificado de firmas X.509 asignado al espacio de nombres de servicio de ACS.

  1. Inicialice el cliente del servicio de administración agregando el código siguiente al método Principal de la clase Programa:

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

    //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 de tokens, agregue el código siguiente al método Principal de la clase Programa:

    noteNota
    Sustituya "Ruta completa al archivo .PFX", en el código siguiente, por la ruta completa válida al certificado X.509. Por ejemplo, si un certificado denominado ACS2ClientCertificate.pfx se guarda en C:\, el valor correcto es "C:\ ACS2ClientCertificate.pfx".

    Sustituya “MyCertificatePassword”, en el código siguiente, por 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[] 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);
    
    

En este ejemplo, cree un certificado de firmas X.509 asignado a una aplicación de usuario de confianza específica.

  1. Inicialice el cliente del servicio de administración agregando el código siguiente al método Principal de la clase Programa:

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

    //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 de tokens, agregue el código siguiente al método Principal de la clase Programa:

    noteNota
    Sustituya "Ruta completa al archivo .PFX", en el código siguiente, por la ruta completa válida al certificado X.509. Por ejemplo, si un certificado denominado ACS2ClientCertificate.pfx se guarda en C:\, el valor correcto es "C:\ ACS2ClientCertificate.pfx".

    Sustituya “MyCertificatePassword”, en el código siguiente, por la contraseña correcta del certificado X.509.

    Sustituya “MyRelyingPartyApplication” en el código siguiente por el nombre correcto de su Aplicación de usuario de confianza existente para la que desea usar este certificado de firma de tokens.

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

En este ejemplo, asigne una clave simétrica de firma al espacio de nombres de servicio de ACS.

  1. Inicialice el cliente del servicio de administración agregando el código siguiente al método Principal de la clase Programa:

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

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

En este ejemplo, asigne una nueva clave simétrica de firma a una aplicación de usuario de confianza específica.

  1. Inicialice el cliente del servicio de administración agregando el código siguiente al método Principal de la clase Programa:

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

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

En este ejemplo, agregue un certificado de cifrado de tokens X.509 a una aplicación de usuario de confianza específica.

  1. Inicialice el cliente del servicio de administración agregando el código siguiente al método Principal de la clase Programa:

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

    noteNota
    Sustituya "Ruta completa al archivo .CER", en el código siguiente, por la ruta completa válida al certificado X.509. Por ejemplo, si un certificado denominado ACS2ClientCertificate.cer se guarda en C:\, el valor correcto es "C:\ ACS2ClientCertificate.cer".

    Sustituya “MyCertificatePassword”, en el código siguiente, por la contraseña correcta del certificado X.509.

    Sustituya “MyRelyingPartyApplication” en el código siguiente por el nombre correcto de su Aplicación de usuario de confianza existente para la que desea usar este certificado de firma de tokens.

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

En este ejemplo, agregue un certificado de descifrado de tokens X.509 asignado al espacio de nombres de servicio de ACS.

  1. Inicialice el cliente del servicio de administración agregando el código siguiente al método Principal de la clase Programa:

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

    //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 de tokens, agregue el código siguiente al método Principal de la clase Programa:

    noteNota
    Sustituya "Ruta completa al archivo .PFX", en el código siguiente, por la ruta completa válida al certificado X.509. Por ejemplo, si un certificado denominado ACS2ClientCertificate.pfx se guarda en C:\, el valor correcto es "C:\ ACS2ClientCertificate.pfx".

    Sustituya “MyCertificatePassword”, en el código siguiente, por 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);
    
    

Vea también

Adiciones de comunidad

AGREGAR
Mostrar:
© 2014 Microsoft