Uso del servicio de administración de ACS para configurar identidades de servicio
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 identidades de servicio de ACS mediante el Portal de administración de ACS (para obtener más información, consulte Identidades de servicio) 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 identidades de servicio 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 identidades de servicio 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 identidad de servicio
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
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.
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.
Obtenga el valor de la contraseña de la cuenta de servicio de administración de ACS. Para ver este valor, haga lo siguiente:
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.
En la página Servicio de administración, haga clic en ManagementClient en Cuentas de servicio de administración.
En la página Editar cuenta del servicio de administración, en Credenciales, haga clic en Contraseña.
En la página Editar credencial de administración, copie el valor del campo Contraseña.
Obtenga el valor de su espacio de nombres de Azure. Puede obtener este valor de la Azure Portal o de la dirección URL del Portal de administración de ACS. Por ejemplo, en http://contoso.accesscontrol.windows.net, el valor del espacio de nombres de Azure es contoso.
Obtenga el valor del 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 las identidades de servicio de ACS.
Para crear una aplicación de consola de ejemplo
Abra Visual Studio 2012 y cree un nuevo proyecto de aplicación de consola.
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
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.
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
Agregue las declaraciones siguientes, donde MyConsoleApplication corresponde al nombre de la aplicación de consola y MyServiceReference es el nombre de su referencia de servicio:
using System; 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
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; }
Agregue el código siguiente a la clase Program para crear el método GetTokenWithWritePermission junto con los métodos de su asistente. 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 identidad de servicio
En este paso, agregará una identidad de servicio mediante el cliente de servicio de administración creado en el paso anterior. La identidad de servicio de ACS puede usar una contraseña, una clave simétrica o un certificado X.509 como tipo de credencial.
Para agregar una identidad de servicio
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();
Realice una de las siguientes acciones:
Para agregar una identidad de servicio asociada a una contraseña y guardar los cambios, agregue el código siguiente al método Main de la clase Program:
Nota
Esta identidad de servicio puede denominarse “SampleServiceIdentity” y su contraseña puede establecerse en “SampleServiceIdentityPassword” tal como indica el código siguiente.
string name = "SampleServiceIdentity"; string password = "SampleServiceIdentityPassword"; ServiceIdentity sid = new ServiceIdentity() { Name = name }; DateTime startDate, endDate; startDate = DateTime.UtcNow; endDate = DateTime.MaxValue; ServiceIdentityKey key = new ServiceIdentityKey() { EndDate = endDate.ToUniversalTime(), StartDate = startDate.ToUniversalTime(), Type = "Password", Usage = "Password", Value = Encoding.UTF8.GetBytes(password), DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Password", name) }; svc.AddToServiceIdentities(sid); svc.AddRelatedObject( sid, "ServiceIdentityKeys", key); svc.SaveChanges(SaveChangesOptions.Batch);
Para agregar una identidad de servicio asociada a una clave simétrica y guardar los cambios, agregue el código siguiente al método Main de la clase Program:
Nota
Esta identidad de servicio puede denominarse “SampleServiceIdentity” y su clave simétrica puede establecerse en “SampleServiceIdentityPassword” tal como indica el código siguiente.
string name = "SampleServiceIdentity"; string symKey = "SampleServiceIdentitySymmetricKey"; ServiceIdentity sid = new ServiceIdentity() { Name = name }; DateTime startDate, endDate; startDate = DateTime.UtcNow; endDate = DateTime.MaxValue; ServiceIdentityKey key = new ServiceIdentityKey() { EndDate = endDate.ToUniversalTime(), StartDate = startDate.ToUniversalTime(), Type = "Symmetric", Usage = "Signing", Value = Convert.FromBase64String(symKey), DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Sym Key", name) }; svc.AddToServiceIdentities(sid); svc.AddRelatedObject( sid, "ServiceIdentityKeys", key); svc.SaveChanges(SaveChangesOptions.Batch);
Para agregar una identidad de servicio asociada a un certificado X.509 y guardar los cambios, agregue el código siguiente al método Main de la clase Program:
Nota
Esta identidad de servicio puede denominarse “SampleServiceIdentity” tal como se muestra en el código siguiente
En el código siguiente, sustituya "Dirección completa al archivo .CER" por la ruta completa del certificado X.509. Por ejemplo, si un certificado denominado ACS2ClientCertificate.cer se guarda en C:\, el valor correcto será "C:\ ACS2ClientCertificate.cer".string name = "SampleServiceIdentity"; X509Certificate2 cert = new X509Certificate2(@"Full path to your .CER file"); ServiceIdentity sid = new ServiceIdentity() { Name = name }; DateTime startDate, endDate; startDate = cert.NotBefore.ToUniversalTime(); endDate = cert.NotAfter.ToUniversalTime(); ServiceIdentityKey key = new ServiceIdentityKey() { EndDate = endDate.ToUniversalTime(), StartDate = startDate.ToUniversalTime(), Type = "X509Certificate", Usage = "Signing", Value = cert.GetRawCertData(), DisplayName = String.Format(CultureInfo.InvariantCulture, "{0} key for {1}", "Cert", name) }; svc.AddToServiceIdentities(sid); svc.AddRelatedObject( sid, "ServiceIdentityKeys", key); svc.SaveChanges(SaveChangesOptions.Batch);