Cómo: Usar el servicio de administración de ACS para configurar aplicaciones de usuario autenticado
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 aplicaciones de usuario de confianza de ACS mediante el Portal de administración de ACS (para obtener más información, consulte Aplicaciones de usuario autenticado) 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 aplicaciones de usuario de confianza 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 aplicaciones de usuario de confianza 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 aplicación de usuario de confianza
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 del 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 nombre de su espacio de nombres de Azure. Puede obtener este valor desde el Azure Portal o desde la dirección URL del Portal de administración de ACS. Por ejemplo, en http://contoso.accesscontrol.windows.net, el nombre del espacio de nombres es contoso.
Obtenga el 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 reglas y grupos de reglas 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 en la plantilla Windows instalada.
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 su aplicación de consola:
using System; using System.IO; 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 método GetTokenWithWritePermission y sus métodos del asistente a la clase Program. 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 aplicación de usuario de confianza
En este paso, creará una aplicación de usuario de confianza de ejemplo con un formato de token SAML 2.0 (opción predeterminada), ninguna directiva de cifrado de tokens (opción predeterminada), asociada a un proveedor de identidades de Windows Live ID (cuenta microsoft) (opción predeterminada), 600 segundos de duración del token (opción predeterminada) y un certificado de firma de tokens X.509 personalizado para la aplicación de usuario autenticado o un certificado de firma de tokens para la aplicación de usuario autenticado. Access Control espacio de nombres.
Para agregar una aplicación de usuario de confianza con un certificado de firma de tokens de espacio de nombres Access Control
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();
Agregue la nueva aplicación de usuario de confianza (puede llamarla “MiAplicaciónDeUsuarioDeConfianza”, tal como se muestra en el código siguiente) y guarde los cambios. Para ello, agregue el método Main a la clase Program:
Nota
Sustituya la cadena "Full path to your .PFX file" del código con la ruta de acceso completa válida de su certificado X.509. Por ejemplo, si se guarda un certificado llamado ACS2ClientCertificate.cer en C:, el valor correcto es "C:\ ACS2ClientCertificate.cer".
Sustituya la cadena “MyCertificatePassword” del código con la contraseña correcta del certificado X.509.//Create Relying Party Application RelyingParty relyingParty = new RelyingParty() { Name = "MyRelyingPartyApplication", AsymmetricTokenEncryptionRequired = false, TokenType = "SAML_2_0", TokenLifetime = 3600 }; svc.AddToRelyingParties(relyingParty); //Create the Realm Address RelyingPartyAddress realmAddress = new RelyingPartyAddress() { Address = "http://TestRelyingParty.com/Realm", EndpointType = "Realm" }; svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", realmAddress); //Create the Return URL Address RelyingPartyAddress replyAddress = new RelyingPartyAddress() { Address = "http://TestRelyingParty.com/Reply", EndpointType = "Reply" }; svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", replyAddress); // Create a Rule Group for This Relying Party Application RuleGroup rg = new RuleGroup(); rg.Name = "SampleRuleGroup For " + relyingParty.Name; svc.AddToRuleGroups(rg); // Assign This New Rule Group to Your New Relying Party Application RelyingPartyRuleGroup relyingPartyRuleGroup = new RelyingPartyRuleGroup(); svc.AddToRelyingPartyRuleGroups(relyingPartyRuleGroup); svc.AddLink(relyingParty, "RelyingPartyRuleGroups", relyingPartyRuleGroup); svc.AddLink(rg, "RelyingPartyRuleGroups", relyingPartyRuleGroup); //Save Your New Relying Party Application svc.SaveChanges(SaveChangesOptions.Batch);
Para agregar una aplicación de usuario de confianza con un certificado de firma dedicado
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();
Cree una función auxiliar ReadBytesFromPfxFile para leer bytes del certificado X.509 agregando el código siguiente a la clase Program:
//Helper Function to Read Bytes from Your .pfx file public static byte[] ReadBytesFromPfxFile(string pfxFileName, string protectionPassword) { byte[] signingCertificate; using (FileStream stream = File.OpenRead(pfxFileName)) { using (BinaryReader br = new BinaryReader(stream)) { signingCertificate = br.ReadBytes((int)stream.Length); } } return signingCertificate; }
Agregue la nueva aplicación de usuario de confianza (puede llamarla “MiAplicaciónDeUsuarioDeConfianza”, tal como se muestra en el código siguiente) y guarde los cambios. Para ello, agregue el método Main a la clase Program:
Nota
Sustituya la cadena "Full path to your .PFX file" del código con la ruta de acceso completa válida de su certificado X.509. Por ejemplo, si se guarda un certificado llamado ACS2ClientCertificate.cer en C:, el valor correcto es "C:\ ACS2ClientCertificate.cer".
Sustituya la cadena “MyCertificatePassword” del código con la contraseña correcta del certificado X.509.//Create Relying Party Application RelyingParty relyingParty = new RelyingParty() { Name = "MyRelyingPartyApplication", AsymmetricTokenEncryptionRequired = false, TokenType = "SAML_2_0", TokenLifetime = 3600 }; svc.AddToRelyingParties(relyingParty); //Create the Realm Address RelyingPartyAddress realmAddress = new RelyingPartyAddress() { Address = "http://TestRelyingParty.com/Realm", EndpointType = "Realm" }; svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", realmAddress); //Create the Return URL Address RelyingPartyAddress replyAddress = new RelyingPartyAddress() { Address = "http://TestRelyingParty.com/Reply", EndpointType = "Reply" }; svc.AddRelatedObject(relyingParty, "RelyingPartyAddresses", replyAddress); //Create a Signing Certificate X509Certificate2 cert = new X509Certificate2(@"Full path to your .PFX file", "MyCertificatePassword"); DateTime startDate, endDate; startDate = cert.NotBefore.ToUniversalTime(); endDate = cert.NotAfter.ToUniversalTime(); string pfxFileName = @"Full path to your .PFX file"; string pfxPassword = @"MyCertificatePassword"; byte[] signingCertificate = ReadBytesFromPfxFile(pfxFileName, pfxPassword); RelyingPartyKey relyingPartyKey = new RelyingPartyKey() { StartDate = startDate.ToUniversalTime(), EndDate = endDate.ToUniversalTime(), Type = "X509Certificate", Usage = "Signing", IsPrimary = true, Value = signingCertificate, Password = Encoding.UTF8.GetBytes("MyCertificatePassword") }; svc.AddRelatedObject(relyingParty, "RelyingPartyKeys", relyingPartyKey); // Create a Rule Group for This Relying Party Application RuleGroup rg = new RuleGroup(); rg.Name = "SampleRuleGroup For " + relyingParty.Name; svc.AddToRuleGroups(rg); // Assign This New Rule Group to Your New Relying Party Application RelyingPartyRuleGroup relyingPartyRuleGroup = new RelyingPartyRuleGroup(); svc.AddToRelyingPartyRuleGroups(relyingPartyRuleGroup); svc.AddLink(relyingParty, "RelyingPartyRuleGroups", relyingPartyRuleGroup); svc.AddLink(rg, "RelyingPartyRuleGroups", relyingPartyRuleGroup); //Save Your New Relying Party Application svc.SaveChanges(SaveChangesOptions.Batch);