¿Le resultó útil esta página?
Sus comentarios sobre este contenido son muy importantes. Háganos saber su opinión.
¿Tiene comentarios adicionales?
Caracteres restantes: 1500
Procedimiento: Uso del servicio de administración de ACS para configurar un proveedor de identidades de OpenID
Collapse the table of content
Expand the table of content

Procedimiento: Uso del servicio de administración de ACS para configurar un proveedor de identidades de OpenID

Publicada: abril de 2011

Actualizado: junio de 2015

Se aplica a: Azure

  • Microsoft® Azure™ Access Control Service (ACS)

  • OpenID 2.0

Este tema describe los pasos básicos necesarios para agregar proveedores de identidades que admitan el protocolo OpenID. Es posible agregar proveedores de identidades de OpenID a ACS mediante el servicio de administración. Los proveedores de identidades de OpenID no se pueden agregar mediante el Portal de administración de ACS. En este tema, se hace referencia a la especificación OpenID 2.0 porque esta es la versión de especificación que admite ACS.

  • 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 cliente del servicio de administración

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

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

  • Mostrar los pasos necesarios para agregar un proveedor de identidades de OpenID.

El servicio de administración es un servicio web y componente clave de ACS. El servicio de administración incluye funciones que están disponibles mediante 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. La adición de proveedores de identidades de OpenID de ACS permite ahorrar en el desarrollo y el mantenimiento del mecanismo de administración de identidades de escala de Internet. Para realizar la tarea de agregar un proveedor de identidades OpenID, escriba el código que sigue los pasos específicos. 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 cliente del servicio de administración

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

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: suele ser accesscontrol.windows.net.

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 el proveedor de identidades OpenID:

  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 = "...update to your password...";

        static string serviceNamespace = "...update to your namespace...";
        static string acsHostName = "accesscontrol.windows.net";
        static string acsManagementServicesRelativeUrl = "v2/mgmt/service/";

        static string identityProviderName = "My Open ID Identity Provider";

        static string cachedSwtToken;


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

Tenga en cuenta la última declaración, ConsoleApplication1.ServiceReference1. 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.

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

Este paso permite agregar un proveedor de identidades OpenID mediante el cliente del servicio de administración creado anteriormente.

  1. En el método Main, inicie el cliente 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.

                var openId = new IdentityProvider
                {
                    DisplayName = identityProviderName,
                    Description = identityProviderName,
                    WebSSOProtocolType = "OpenId",
                    IssuerId = issuer.Id
                };
    
                svc.AddObject("IdentityProviders", openId);
    
    
    
  4. Actualice la dirección de inicio de sesión del proveedor de identidades. En este ejercicio, se utilizará www.myopenid.com como dirección de inicio de sesión. Otros proveedores de identidades OpenID son, por ejemplo, Google y Yahoo!. Estos disponen de sus propias direcciones de inicio de sesión. Las direcciones son https://www.google.com/accounts/o8/ud y https://open.login.yahooapis.com/openid/op/auth, respectivamente.

                var openIdAddress = new IdentityProviderAddress
                {
                    Address = "https://www.myopenid.com/server",
                    EndpointType = "SignIn"
                };
    
                svc.AddRelatedObject(openId, "IdentityProviderAddresses", openIdAddress);
                svc.SaveChanges();
    
    
    
  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 = openId.Id,
                            RelyingPartyId = rp.Id
                        });
                    }
                }
    
                svc.SaveChanges(SaveChangesOptions.Batch);
    
    
    

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft