Exportar (0) Imprimir
Expandir todo
Expandir Minimizar

Procedimiento: Usar el servicio de administración de ACS para configurar identidades de servicio

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 identidades de servicio de ACS mediante el Portal de administración de ACS (para obtener más información, vea Identidades de servicio) o a través del Servicio de administración de ACS. Utilizar el Servicio de administración de ACS resulta más eficaz para crear interfaces de usuario personalizadas diseñadas para la administración de ACS o si desea automatizar la incorporación de nuevos inquilinos para soluciones de software como servicio (SaaS) de múltiples inquilinos.

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

Para configurar identidades de servicio mediante el Servicio de administración de ACS, realice los pasos siguientes:

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

  1. Inicie el Portal de administración ACS. Para obtener más información acerca del inicio del Portal de administración de ACS, vea Portal de administración de ACS.

  2. Obtenga el valor de la cuenta de servicio de administración de ACS. Puede usar la cuenta ManagementClient predeterminada. 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 situado en la parte izquierda de la página.

  3. Obtenga el valor de la contraseña de la cuenta de 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 situado en la parte izquierda de la página.

    2. En la página Servicio de administración, haga clic en ManagementClient en Cuentas de 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 credencial de administración, copie el valor del campo Contraseña.

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

  5. Obtenga el valor del nombre de host de ACS. En general, suele ser accesscontrol.windows.net.

En este paso creará una aplicación de consola de ejemplo que permita ejecutar el código para agregar las identidades de servicio de ACS.

  1. Abra Visual Studio 2012 y cree un nuevo proyecto de aplicación de consola.

  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;
    
    

En este paso, deberá identificar y agregar las dependencias necesarias de 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 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://SU ESPACIO DE NOMBRES.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.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 se implementa el cliente del 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 código siguiente a la clase Program para crear el método GetTokenWithWritePermission junto con sus métodos auxiliares. El método GetTokenWithWritePermission y sus métodos auxiliares 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;
    
            }
    
    
    

En este paso, agregará una identidad de servicio mediante el cliente de servicio de administración creado en el paso anterior. La identidad de servicio de ACS puede usar una contraseña, una clave simétrica o un certificado X.509 como tipo de credencial.

  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. Realice una de las acciones siguientes:

    • Para agregar una identidad de servicio asociada a una contraseña y guardar los cambios, agregue el código siguiente al método Main de la clase Program:

      noteNota
      Esta identidad de servicio puede denominarse “SampleServiceIdentity” y su contraseña puede establecerse en “SampleServiceIdentityPassword” tal como indica el código siguiente.

      
                  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);
      
      
    • Para agregar una identidad de servicio asociada a una clave simétrica y guardar los cambios, agregue el código siguiente al método Main de la clase Program:

      noteNota
      Esta identidad de servicio puede denominarse “SampleServiceIdentity” y su clave simétrica puede establecerse en “SampleServiceIdentityPassword” tal como indica el código siguiente.

      
                  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);
      
      
    • Para agregar una identidad de servicio asociada a un certificado X.509 y guardar los cambios, agregue el código siguiente al método Main de la clase Program:

      noteNota
      Esta identidad de servicio puede denominarse “SampleServiceIdentity” tal como se muestra en el código siguiente

      En el código siguiente, sustituya "Dirección completa al archivo .CER" por la ruta completa del certificado X.509. Por ejemplo, si un certificado denominado ACS2ClientCertificate.cer se guarda en C:\, el valor correcto será "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);
      
      

Vea también

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft