Esta documentación está archivada y no tiene mantenimiento.

Procedimiento: Uso del servicio de administración de ACS para configurar AD FS 2.0 como proveedor de identidades de OpenID

Publicada: abril de 2011

Actualizado: junio de 2015

Se aplica a: Azure

  • Microsoft® Azure™ Access Control Service (ACS)

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

Este tema explica cómo agregar el proveedor de identidades de a un espacio de nombres o aplicación de usuario de confianza. Para realizar esta tarea, puede usar el servicio de administración de ACS. El Servicio de administración resulta especialmente útil para crear interfaces de usuario personalizadas para la administración de ACS y para automatizar la adición de nuevos inquilinos para soluciones de software como servicio (SaaS) de múltiples inquilinos.

  • Objetivos

  • Introducción

  • 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

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

  • Recopilar los pasos necesarios.

  • Comprobar que la configuración funciona correctamente.

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

Agregar Microsoft como proveedor de identidades en ACS permite reutilizar la inversión realizada en administración de identidad corporativa en las soluciones basadas en la nube. Para configurar como proveedor de identidades, deberá escribir un código que siga unos pasos determinados. Este tema describe dichos pasos básicos.

  • 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

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 del certificado de firma: Obtenga el certificado de firma de AD FS de la implementación de .

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 haga clic en Active Directory. (Sugerencia para solución de problemas: falta el elemento "Active Directory" o no está disponible) 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.)

  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 Management Service identity username.

  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.

Tras recopilar la información necesaria, siga los pasos que se describen a continuación para crear una aplicación de consola de muestra 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";
    
    
    

Este paso permite identificar y agregar las dependencias necesarias de 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://SU ESPACIO DE NOMBRES.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;
    
    

Este paso permite crear un método para encapsular la implementación del 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 sus métodos auxiliares. 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;
    
            }
    
    

Este paso permite agregar como proveedor de identidades mediante el proxy del servicio de administración creado anteriormente.

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

  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 los valores predeterminados sin modificar.

  6. Haga clic en Guardar.

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

Mostrar: