Cómo: Usar el servicio de administración de ACS para configurar aplicaciones de usuario autenticado

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 aplicaciones de usuario de confianza de ACS mediante el Portal de administración de ACS (para obtener más información, consulte Aplicaciones de usuario autenticado) 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.

Pasos para la creación de aplicaciones de usuario de confianza que usen 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 aplicaciones de usuario de confianza 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: Adición de una aplicación de usuario de confianza

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 sobre cómo iniciar el Portal de administración de ACS, consulte Portal de administración de ACS.

Para recopilar la información de configuració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, consulte 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 del lado izquierdo de la página.

  3. Obtenga el valor de la contraseña de la 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 del lado izquierdo 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 nombre de su espacio de nombres de Azure. Puede obtener este valor desde el Azure Portal o desde la dirección URL del Portal de administración de ACS. Por ejemplo, en http://contoso.accesscontrol.windows.net, el nombre del espacio de nombres es contoso.

  5. Obtenga el nombre de host de ACS. En general, suele ser 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 reglas y grupos de 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 su aplicación de consola:

    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: Adición de una aplicación de usuario de confianza

En este paso, creará una aplicación de usuario de confianza de ejemplo con un formato de token SAML 2.0 (opción predeterminada), ninguna directiva de cifrado de tokens (opción predeterminada), asociada a un proveedor de identidades de Windows Live ID (cuenta microsoft) (opción predeterminada), 600 segundos de duración del token (opción predeterminada) y un certificado de firma de tokens X.509 personalizado para la aplicación de usuario autenticado o un certificado de firma de tokens para la aplicación de usuario autenticado. Access Control espacio de nombres.

Para agregar una aplicación de usuario de confianza con un certificado de firma de tokens de 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. Agregue la nueva aplicación de usuario de confianza (puede llamarla “MiAplicaciónDeUsuarioDeConfianza”, tal como se muestra en el código siguiente) y guarde los cambios. Para ello, agregue el método Main a 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.cer en C:, el valor correcto es "C:\ ACS2ClientCertificate.cer".

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

                //Create Relying Party Application
    
                RelyingParty relyingParty = new RelyingParty()
                {
                    Name = "MyRelyingPartyApplication",
                    AsymmetricTokenEncryptionRequired = false,
                    TokenType = "SAML_2_0",
                    TokenLifetime = 3600
                };
    
                svc.AddToRelyingParties(relyingParty);
    
    
                //Create the Realm Address
    
                RelyingPartyAddress realmAddress = new RelyingPartyAddress()
                {
                    Address = "http://TestRelyingParty.com/Realm",
                    EndpointType = "Realm"
                };
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", realmAddress);
    
                //Create the Return URL Address
    
                RelyingPartyAddress replyAddress = new RelyingPartyAddress()
                {
                    Address = "http://TestRelyingParty.com/Reply",
                    EndpointType = "Reply"
                };
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", replyAddress);
    
              // Create a Rule Group for This Relying Party Application
    
                RuleGroup rg = new RuleGroup();
                rg.Name = "SampleRuleGroup For " + relyingParty.Name;
                svc.AddToRuleGroups(rg);
    
                // Assign This New Rule Group to Your New Relying Party Application
    
                RelyingPartyRuleGroup relyingPartyRuleGroup = new RelyingPartyRuleGroup();
    
                svc.AddToRelyingPartyRuleGroups(relyingPartyRuleGroup);
                svc.AddLink(relyingParty, "RelyingPartyRuleGroups", relyingPartyRuleGroup);
                svc.AddLink(rg, "RelyingPartyRuleGroups", relyingPartyRuleGroup);
    
    
                //Save Your New Relying Party Application
    
                svc.SaveChanges(SaveChangesOptions.Batch);
    

Para agregar una aplicación de usuario de confianza con un certificado de firma dedicado

  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. Agregue la nueva aplicación de usuario de confianza (puede llamarla “MiAplicaciónDeUsuarioDeConfianza”, tal como se muestra en el código siguiente) y guarde los cambios. Para ello, agregue el método Main a 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.cer en C:, el valor correcto es "C:\ ACS2ClientCertificate.cer".

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

                //Create Relying Party Application
    
                RelyingParty relyingParty = new RelyingParty()
                {
                    Name = "MyRelyingPartyApplication",
                    AsymmetricTokenEncryptionRequired = false,
                    TokenType = "SAML_2_0",
                    TokenLifetime = 3600
                };
    
                svc.AddToRelyingParties(relyingParty);
    
    
                //Create the Realm Address
    
                RelyingPartyAddress realmAddress = new RelyingPartyAddress()
                {
                    Address = "http://TestRelyingParty.com/Realm",
                    EndpointType = "Realm"
                };
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", realmAddress);
    
                //Create the Return URL Address
    
                RelyingPartyAddress replyAddress = new RelyingPartyAddress()
                {
                    Address = "http://TestRelyingParty.com/Reply",
                    EndpointType = "Reply"
                };
    
                svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", replyAddress);
    
                //Create 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")
                };
                svc.AddRelatedObject(relyingParty, "RelyingPartyKeys", relyingPartyKey);
    
    
              // Create a Rule Group for This Relying Party Application
    
                RuleGroup rg = new RuleGroup();
                rg.Name = "SampleRuleGroup For " + relyingParty.Name;
                svc.AddToRuleGroups(rg);
    
                // Assign This New Rule Group to Your New Relying Party Application
    
                RelyingPartyRuleGroup relyingPartyRuleGroup = new RelyingPartyRuleGroup();
    
                svc.AddToRelyingPartyRuleGroups(relyingPartyRuleGroup);
                svc.AddLink(relyingParty, "RelyingPartyRuleGroups", relyingPartyRuleGroup);
                svc.AddLink(rg, "RelyingPartyRuleGroups", relyingPartyRuleGroup);
    
    
                //Save Your New Relying Party Application
    
                svc.SaveChanges(SaveChangesOptions.Batch);
    

Consulte también

Conceptos

Procedimientos de ACS