Exportar (0) Imprimir
Expandir todo
Expandir Minimizar

Procedimiento: Implementar control de acceso basado en roles (RBAC) en una aplicación ASP.NET compatible con notificaciones usando WIF y ACS

Publicada: abril de 2011

Actualizado: marzo de 2015

Se aplica a: Azure

  • Active Directory Access Control de Microsoft Azure (también conocido como Access Control Service o ACS)

  • Windows® Identity Foundation (WIF)

  • ASP.NET

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

  • Objetivos

  • Introducción

  • 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: Probar el trabajo

  • Elementos relacionados

  • Configurar notificaciones de rol mediante ACS.

  • Transformar las notificaciones de rol mediante el ClaimsAuthenticationManager.

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

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

  • 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: Probar el trabajo

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.

  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.

En este paso se muestra cómo configurar las notificaciones de rol en el Portal de administración de ACS mediante grupos de reglas. Consulte Procedimiento: Implementar la lógica de transformación de tokens mediante reglas para ver un tutorial paso a paso.

  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.

    http://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 la configuración de reglas más complejas, vea Procedimiento: Implementar la lógica de transformación de tokens mediante reglas.

En este paso se muestra cómo implementar RBAC.

  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.");
            }
        }
    }
    
    

Este es un paso opcional. En este paso se muestra cómo transformar notificaciones mediante ClaimsAuthenticationManager, que forma parte de la canalización WIF que se ejecuta en el contexto de la aplicación ASP.NET, al contrario que las reglas de transformación de notificaciones que se ejecutan en ACS, según se describe en el Paso 2: Configurar las notificaciones de rol en ACS .

  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.

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.

Adiciones de comunidad

AGREGAR
Mostrar:
© 2015 Microsoft