Compartir a través de


Cómo: Usar el servicio de administración de ACS para configurar Facebook como proveedor de identidades de Internet

Actualizado: 19 de junio de 2015

Se aplica a: Azure

Se aplica a

  • Microsoft® Azure™ Access Control Service (ACS)

  • Facebook

Resumen

Este tema describe los pasos básicos necesarios para agregar Facebook como proveedor de identidades. Facebook se puede agregar como proveedor de identidades a ACS mediante el Portal de administración o se puede automatizar con el servicio de administración de ACS. Trabajar con el servicio de administración es útil, por ejemplo, en escenarios en los que se crea una interfaz de usuario personalizada para administrar ACS o al automatizar la incorporación de un nuevo inquilino 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 la información de configuración y los requisitos previos necesarios.

  • Mostrar los pasos necesarios para agregar Facebook como proveedor de identidades.

  • Probar la configuración para ver si funciona correctamente.

Información general

Management Service es un servicio web que es uno de los componentes clave de ACS. El servicio de administración dispone de unas funciones que están disponibles a través de la interfaz de usuario del Portal de administración. Todas las acciones que se pueden realizar en el Portal de administración también pueden realizarse mediante el servicio de administración. Agregar Facebook como proveedor de identidades a ACS le permite ahorrar en el desarrollo y el mantenimiento del mecanismo de administración de identidades de escala de Internet. Para realizar la tarea de configuración de Facebook como proveedor de identidades, deberá escribir un código que siga unos pasos determinados. 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 identifica y muestra 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: ManagementClient.

  • Contraseña de la identidad del servicio de administración: para obtener la contraseña de la identidad del servicio de administración:

    1. Inicie sesión en el Portal de administración del Servicio de control de acceso.

    2. En la sección Administración, haga clic en el vínculo Servicio de administración.

    3. En la página Servicio de administración, haga clic en el vínculo ManagementClient (ManagementClient es el nombre de usuario real para el servicio).

    4. En la sección Credenciales, haga clic en el vínculo Clave simétrica o Contraseña. El valor de cada uno de estos vínculos es el mismo. Esta es la contraseña.

  • El espacio de nombres de su servicio

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

  • Id. de aplicación de Facebook y Secreto de aplicación: siga las instrucciones de Cómo: Configurar Facebook como proveedor de identidades.

Tras recopilar la información necesaria, siga los pasos siguientes para crear una aplicación de consola de ejemplo que ejecute el código para agregar Facebook como proveedor de identidades:

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

  2. En la clase Program, asigne la información recopilada a las variables de ámbito del módulo. Para ello, utilice un código similar al siguiente.

static string serviceIdentityUsernameForManagement = "ManagementClient";
static string serviceIdentityPasswordForManagement = "My Password for my ManagementClient";

static string serviceNamespace = "MyNameSpaceNoDots";
static string acsHostName = "accesscontrol.windows.net";
static string acsManagementServicesRelativeUrl = "v2/mgmt/service/";


static string cachedSwtToken;
static string identityProviderName = "Facebook";

static string facebookAppId = "Your Facebook AppID";
static string facebookAppSecret = "Your Facebook Secret";

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;
    using System.Globalization;
    using System.Runtime.Serialization.Json;
    using ConsoleApplication1.ServiceReference1;
    

Tenga en cuenta la última declaración, ConsoleApplication1.ServiceReference1, ya que puede variar en su caso si modificó los valores predeterminados al crear la aplicación de consola o al agregar la referencia al servicio de administración.

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 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. 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, "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 4: Adición de un proveedor de identidades

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

Para agregar Facebook como proveedor de identidades

  1. En el método Main, 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 + “-” + facebookAppId
    };
    svc.AddToIssuers(issuer);
    svc.SaveChanges(SaveChangesOptions.Batch);
    
  3. Cree un proveedor de identidades.

    var facebook = new IdentityProvider
    {
        DisplayName = identityProviderName,
        LoginLinkName = "Facebook",
        LoginParameters = "email",
        WebSSOProtocolType = "Facebook",
        IssuerId = issuer.Id
    };
    
    svc.AddObject("IdentityProviders", facebook);
    
  4. Cree una clave de firma del proveedor de identidades basada en el certificado obtenido anteriormente.

    var facebookKeys = new[]
        {
            new IdentityProviderKey
                {
                    IdentityProvider = facebook,
                    StartDate = DateTime.UtcNow,
                    EndDate = DateTime.UtcNow.AddYears(1),
                    Type = "ApplicationKey",
                    Usage = "ApplicationId",
                    Value = Encoding.UTF8.GetBytes(facebookAppId)
                },
            new IdentityProviderKey
                {
                    IdentityProvider = facebook,
                    StartDate = DateTime.UtcNow,
                    EndDate = DateTime.UtcNow.AddYears(1),
                    Type = "ApplicationKey",
                    Usage = "ApplicationSecret",
                    Value = Encoding.UTF8.GetBytes(facebookAppSecret)
                }
        };
    
    foreach (var key in facebookKeys)
    {
        svc.AddRelatedObject(facebook, "IdentityProviderKeys", key);
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    
  5. 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 = facebook.Id,
                RelyingPartyId = rp.Id
            });
        }
    }
    
    svc.SaveChanges(SaveChangesOptions.Batch);
    

Paso 5: Prueba del trabajo

Para probar su trabajo

  1. Inicie sesión en el Portal de administración del Servicio de control de acceso.

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

  3. Haga clic en cualquiera de las reglas disponibles.

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

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

  6. Deje el resto de valores predeterminados.

  7. Haga clic en Save(Guardar).

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