Compartir a través de


Cómo: Implementar Access Control basado en roles (RBAC) en una aplicación ASP.NET compatible con notificaciones mediante WIF y ACS

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)

  • Windows® Identity Foundation (WIF)

  • ASP.NET

Resumen

En este tema se explica cómo implementar la autorización de Access Control basado en roles (RBAC) en aplicaciones web compatibles con notificaciones ASP.NET mediante WIF y ACS.

Contenido

  • Objetivos

  • Información general

  • Resumen de pasos

  • Paso 1: Crear una aplicación web ASP.NET simple compatible con notificaciones

  • Paso 2: Configurar las notificaciones de rol en ACS

  • Paso 3: Implementar comprobaciones de rol en una aplicación web ASP.NET

  • Paso 4: Implementar una transformación de notificaciones mediante un ClaimsAuthenticationManager personalizado

  • Paso 5: Prueba del trabajo

  • Elementos relacionados

Objetivos

  • Configure notificaciones de rol mediante ACS.

  • Transformar las notificaciones de rol mediante el ClaimsAuthenticationManager.

  • Implemente comprobaciones de control de acceso basadas en roles mediante el método IsInRole y los atributos PrinciaplPermission.

Información general

RBAC es un enfoque ampliamente adoptado para restringir el acceso a las aplicaciones. En ASP.NET aplicaciones web, este enfoque se implementa mediante el método IsInRole, el atributo PrincipalPermission o las demandas, que han estado disponibles desde ASP.NET 1.0. Puede usar notificaciones para la autorización, con lo que se conservan prácticas bien establecidas al usar nuevas tecnologías, como WIF y ACS. Puede descargar el SDK de WIF y WIF en tiempo de ejecución aquí:

Resumen de pasos

  • Paso 1: Crear una aplicación web ASP.NET simple compatible con notificaciones

  • Paso 2: Configurar las notificaciones de rol en ACS

  • Paso 3: Implementar comprobaciones de rol en una aplicación web ASP.NET

  • Paso 4: Implementar una transformación de notificaciones mediante un ClaimsAuthenticationManager personalizado

  • Paso 5: Prueba del trabajo

Paso 1: Crear una aplicación web ASP.NET simple compatible con notificaciones

En este paso se muestra cómo crear una aplicación web ASP.NET básica que se usará como línea base para implementar RBAC.

Para crear una aplicación web ASP.NET simple

  1. Inicie Visual Studio con la opción “Ejecutar como administrador”. Esto es necesario para WIF.

  2. Cree una aplicación web ASP.NET vacía.

  3. Agregue el formulario web aspx y asígnele un nombre, por ejemplo, default.aspx.

Paso 2: Configurar las notificaciones de rol en ACS

En este paso se muestra cómo configurar notificaciones de rol en el Portal de administración de ACS mediante grupos de reglas. Consulte How to: Implement Token Transformation Logic Using Rules (Implementación de lógica de transformación de tokens mediante reglas ) para ver un tutorial detallado completo.

Para configurar notificaciones de rol en el Portal de administración de ACS

  1. En la página Editar aplicación de usuario de confianza, desplácese hasta la sección Grupos de reglas y luego haga clic en el vínculo del grupo deseado. Asegúrese de que esté seleccionado.

  2. En la página Editar grupo de reglas, desplácese hasta la sección Regla y luego haga clic en el vínculo Agregar regla.

  3. En la página Agregar regla de notificación, desplácese hasta la sección Tipo de notificación de salida, haga clic en el botón de opción Seleccionar tipo y luego elija el siguiente tipo de notificación.

    https://schemas.microsoft.com/ws/2008/06/identity/claims/role
    
  4. En la sección Valor de notificación de salida, haga clic en Escribir valor y luego escriba el texto siguiente en el cuadro de texto:
    User

  5. De forma opcional (recomendada), agregue una descripción y luego haga clic en Guardar.

Acaba de configurar la notificación de rol de usuario que se puede agregar a cualquier token. El escenario podría ser diferente según sus requisitos. Para obtener más información sobre cómo configurar reglas más complejas, vea Cómo: Implementar lógica de transformación de tokens mediante reglas.

Paso 3: Implementar comprobaciones de rol en una aplicación web ASP.NET

En este paso se muestra cómo implementar RBAC.

Para implementar RBAC en una página web ASP.NET

  1. Agregue una referencia al ensamblado Microsoft.IdentityModel.

  2. Abra el código detrás de default.aspx.cs.

  3. Agregue lo siguiente mediante declaraciones.

    using System.Security.Permissions;
    using System.Threading;
    using Microsoft.IdentityModel.Claims;
    using System.Security;
    
  4. Decore el controlador de eventos Page_Load con la siguiente demanda de seguridad. Este atributo comprobará si el usuario actual se encuentra en el rol de usuario. En caso contrario, lanzará una excepción.

    [PrincipalPermission(SecurityAction.Demand, Role = "User")]
    
  5. Agregue el código siguiente al cuerpo del controlador de eventos Page_Load. Es exactamente igual a la demanda expresada en el código.

    PrincipalPermission p = new PrincipalPermission(null, "User");
       p.Demand();
    
  6. Agregue el código siguiente al cuerpo del evento Page_Load. A diferencia del código anterior, este código no lanza una excepción. En su lugar, IsInRole devuelve un valor booleano que indica si el usuario actual tiene el rol especificado.

    if (!User.IsInRole("User"))
                    throw new SecurityException("Access is denied.");
    
  7. El código completado debe ser similar al siguiente.

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    using System.Security.Permissions;
    using System.Threading;
    using Microsoft.IdentityModel.Claims;
    using System.Security;
    
    namespace WebIsInRoleACS
    {
        public partial class _default : System.Web.UI.Page
        {
            //THIS SHOULD THROW AN EXCEPTION
            [PrincipalPermission(SecurityAction.Demand, Role = "User")]
            protected void Page_Load(object sender, EventArgs e)
            {
    
                //THIS SHOULD THROW AN EXCEPTION
                PrincipalPermission p = new PrincipalPermission(null, "User");
                p.Demand();
    
                //THIS RETURNS BOOL
                if (!User.IsInRole("User"))
                    throw new SecurityException("Access is denied.");
            }
        }
    }
    

Paso 4: Implementar una transformación de notificaciones mediante un ClaimsAuthenticationManager personalizado

Se trata de un paso opcional. En este paso se muestra cómo transformar las notificaciones mediante ClaimsAuthenticationManager, que forma parte de la canalización WIF que se ejecuta en el contexto de la aplicación de ASP.NET, en lugar de las reglas de transformación de notificaciones que se ejecutan en ACS, como se describe en paso 2: Configurar notificaciones de rol en ACS.

Para implementar la transformación de notificaciones mediante un ClaimsAuthenticationManager personalizado

  1. Agregue el proyecto Biblioteca de clases a la solución de Visual Studio y luego asígnele un nombre, por ejemplo, MyClaimsTransformationModule.

  2. Agregue una referencia al ensamblado Microsoft.IdentityModel.

  3. Agregue una referencia al ensamblado System.IdentityModel.

  4. Cree una clase y asígnele un nombre, por ejemplo ClaimsTransformationModule.

  5. Agregue las declaraciones siguientes a la clase.

    using Microsoft.IdentityModel.Claims;
    using System.Security.Principal;
    
  6. Derive la clase del tipo ClaimsAuthenticationManager.

  7. Reemplace el método Autenticar (aquí es donde se llevará a cabo la transformación de las notificaciones). El código para el método Autenticar se puede basar en lo siguiente.

    if (incomingPrincipal != null && incomingPrincipal.Identity.IsAuthenticated == true)
    {
        //DECIDE ON SOME CRITERIA IF CURRENT USER DESERVES THE ROLE
        //IClaimsIdentity identity = (IClaimsIdentity)incomingPrincipal.Identity;
        ((IClaimsIdentity)incomingPrincipal.Identity).Claims.Add(
            new Claim(ClaimTypes.Role, "Admin"));
    }
    return incomingPrincipal;
    
  8. Cambie a la aplicación ASP.NET y configure su ClaimsAuthenticationManager personalizado en su archivo web.config.

      <microsoft.identityModel>
        <service>
          <claimsAuthenticationManager type="MyClaimsTransformationModule.ClaimsTransformationModule, MyClaimsTransformationModule" />
    
  9. Asegúrese de que la aplicación encuentre el nuevo ensamblado que creó; la manera más fácil es colocarlo en la carpeta bin de la aplicación.

Paso 5: Prueba del trabajo

En este paso se muestra cómo validar si la solución funciona. Para probar la solución, presione el botón F5. La aplicación web ASP.NET debe ejecutarse en modo de depuración (puede agregar puntos de interrupción para comprobar la ejecución del código en Visual Studio). En primer lugar, debería ir a la página de autenticación del proveedor de identidades configurado para la federación. Una vez completada la autenticación, debería volver a la página Default.aspx sin que se lanzara ninguna excepción, lo que significa que se han cumplido todas las demandas de seguridad para el rol de usuario.