Compartir a través de


Cómo: Usar el servicio de administración de ACS para configurar AD FS 2.0 como proveedor de identidades de Enterprise

Actualizado: 19 de junio de 2015

Se aplica a: Azure

Se aplica a

  • Microsoft® Azure™ Access Control Service (ACS)

  • Microsoft Active Directory® Federation Services (AD FS) 2.0

Resumen

En este tema se explica cómo agregar el proveedor de identidades a un espacio de nombres o una aplicación de usuario de confianza. Para realizar esta tarea, puede usar el servicio de administración de ACS. El servicio de administración es especialmente útil cuando se crea una interfaz de usuario personalizada para administrar ACS y al automatizar la adición de nuevos inquilinos para soluciones de software como servicio (SaaS) multiinquilino.

Contenido

  • Objetivos

  • Información general

  • Resumen de pasos

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

  • Paso 2: Adición de referencias a los ensamblados y servicios requeridos

  • Paso 3: Implementación del proxy del servicio de administración

  • Paso 4: Adición de un proveedor de identidades

  • Paso 5: Prueba del trabajo

Objetivos

  • Identificar los requisitos y la información de configuración.

  • Recopilar los pasos necesarios.

  • Comprobar que la configuración funciona correctamente.

Información general

El servicio de administración de ACS es un servicio web que expone las características de ACS al código. El servicio de administración de ACS puede acceder a todas las características de ACS, incluido el subconjunto de características que está disponible en la interfaz de usuario del Portal de administración de ACS.

Agregar Microsoft como proveedor de identidades a ACS le permite reutilizar la inversión realizada en la administración de identidades corporativas para soluciones basadas en la nube. Para configurar como proveedor de identidades, debe escribir código que siga los pasos específicos. Este tema describe dichos pasos básicos.

Resumen de pasos

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

  • Paso 2: Adición de referencias a los ensamblados y servicios requeridos

  • Paso 3: Implementación del proxy del servicio de administración

  • Paso 4: Adición de un proveedor de identidades

  • Paso 5: Prueba del trabajo

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

Este paso explica cómo recopilar la información de configuración necesaria. Necesitará recopilar la información siguiente:

  • Nombre de usuario de la identidad del servicio de administración. El valor predeterminado es ManagementClient.

  • Contraseña de la identidad del servicio de administración.

  • Nombre del espacio de nombres.

  • Nombre de host de ACS: accesscontrol.windows.net

  • Cadena de certificado de firma: obtenga la cadena de certificado de firma de AD FS de la implementación.

Para buscar el nombre de usuario y la contraseña del servicio de administración, use el procedimiento que se describe a continuación.

  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) Para administrar un espacio de nombres Access Control, seleccione el espacio de nombres y 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.)

  2. Haga clic en Servicio de administración y luego seleccione un servicio de administración como, por ejemplo, ManagementClient.

  3. El valor del campo Nombre es el nombre de usuario de identidad del servicio de administración.

  4. En la sección Credenciales, haga clic en Contraseña. El valor del campo de contraseña corresponde a la contraseña de identidad del servicio de administración.

Después de recopilar la información necesaria, siga estos pasos para crear una aplicación de consola de ejemplo que ejecutará el código para agregar como proveedor de identidades:

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

  2. En la clase Program, asigne los valores de configuración a variables, junto con el ámbito del módulo. El ejemplo de código siguiente muestra cómo se debe realizar la asignación.

    static string serviceIdentityUsernameForManagement = "ManagementClient";
    static string serviceIdentityPasswordForManagement = "ManagementClientPasswordValue";
    
    static string serviceNamespace = "MyNameSpaceNoDots";
    static string acsHostName = "accesscontrol.windows.net";
    
    static string signingCertificate = "Very long string representing ADFS signing certificate";
    
    static string cachedSwtToken;
    static string identityProviderName = "My Other ADFS Identity Provider";
    

Paso 2: Adición de referencias a los ensamblados y servicios requeridos

Este paso permite identificar y agregar las dependencias necesarias de los servicios y ensamblados.

Para agregar las dependencias necesarias a los servicios y ensamblados

  1. Agregue una referencia a System.Web.Extensions.

  2. 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.

    using System.Web; 
    using System.Net; 
    using System.Data.Services.Client; 
    using System.Collections.Specialized; 
    using System.Web.Script.Serialization;
    

Paso 3: Implementación del proxy del servicio de administración

Este paso permite crear un método para encapsular la implementación del proxy del servicio de administración.

Para implementar el proxy del servicio de administración

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

    public static ManagementService CreateManagementServiceClient()
            {
                string managementServiceHead = "v2/mgmt/service/";
                string managementServiceEndpoint = 
    string.Format("https://{0}.{1}/{2}", 
    serviceNamespace, 
    acsHostName, 
    managementServiceHead);
                ManagementService managementService = 
    new ManagementService(new Uri(managementServiceEndpoint));
    
                managementService.SendingRequest += GetTokenWithWritePermission;
    
                return managementService;
            }
    
  2. Implemente el método GetTokenWithWritePermission junto con los métodos de su asistente. Se agregará 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, 
     string.Format("OAuth {0}", 
     cachedSwtToken));
            }
    
            private static string GetTokenFromACS()
            {
                // request a token from ACS
                WebClient client = new WebClient();
                client.BaseAddress = string.Format("https://{0}.{1}", 
          serviceNamespace, 
          acsHostName);
    
                NameValueCollection values = new NameValueCollection();
    
                values.Add("grant_type", "password");
                values.Add("client_id", serviceIdentityUsernameForManagement);
                values.Add("username", serviceIdentityUsernameForManagement);
                values.Add("client_secret", serviceIdentityPasswordForManagement);
                values.Add("password", serviceIdentityPasswordForManagement);
    
                byte[] responseBytes = 
    client.UploadValues("/v2/OAuth2-13/rp/AccessControlManagement", 
          "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 4: Adición de un proveedor de identidades

Este paso se agrega como proveedor de identidades mediante el proxy del servicio de administración que creó anteriormente.

Para agregar AD FS 2.0 como proveedor de identidades

  1. Inicie el proxy del servicio de administración.

    ManagementService svc = CreateManagementServiceClient();
    
  2. Agregue su proveedor de identidades como emisor.

    Issuer issuer = new Issuer
           {
           Name = identityProviderName
    };
           svc.AddToIssuers(issuer);
           svc.SaveChanges(SaveChangesOptions.Batch);
    
  3. Cree un proveedor de identidades.

    IdentityProvider identityProvider = new IdentityProvider()
    {
        DisplayName = identityProviderName,
        Description = identityProviderName,
        WebSSOProtocolType = "WsFederation",
        IssuerId = issuer.Id
    };
           svc.AddObject("IdentityProviders", identityProvider);
    
  4. Cree una clave de firma del proveedor de identidades basada en el certificado obtenido anteriormente.

    IdentityProviderKey identityProviderKey = new IdentityProviderKey()
    {
        DisplayName = "SampleIdentityProviderKeyDisplayName",
        Type = "X509Certificate",
        Usage = "Signing",
        Value = Convert.FromBase64String(signingCertificate),
        IdentityProvider = identityProvider,
        StartDate = startDate,
        EndDate = endDate,
    };
          svc.AddRelatedObject(identityProvider, 
    "IdentityProviderKeys", 
    identityProviderKey);
    
  5. Actualice la dirección de inicio de sesión del proveedor de identidades.

    IdentityProviderAddress realm = new IdentityProviderAddress()
    {
        Address = "http://SampleIdentityProvider.com/sign-in/",
        EndpointType = "SignIn",
        IdentityProvider = identityProvider,
    };
    svc.AddRelatedObject(identityProvider, "IdentityProviderAddresses", realm);
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
  6. Ponga el proveedor de identidades a disposición de los usuarios de confianza, excepto el servicio de administración.

    foreach (RelyingParty rp in svc.RelyingParties)
    {
        // skip the built-in management RP. 
        if (rp.Name != "AccessControlManagement")
        {
            svc.AddToRelyingPartyIdentityProviders(new RelyingPartyIdentityProvider()
            {
                IdentityProviderId = identityProvider.Id,
                RelyingPartyId = rp.Id
            });
        }
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    

Paso 5: Prueba del trabajo

Para probar su trabajo

  1. En la página Access Control Service, haga clic en el vínculo Grupos de reglas situado en la sección Relaciones de confianza.

  2. Haga clic en cualquiera de las reglas disponibles.

  3. En la página Editar grupo de reglas, haga clic en el vínculo Agregar regla.

  4. En la página Agregar regla de notificación, elija el proveedor de identidades recién agregado de la lista desplegable de la sección Emisor de notificaciones.

  5. Deje el resto de valores predeterminados.

  6. Haga clic en Save(Guardar).

Acaba de crear una regla de paso para el proveedor de identidades.