Exportar (0) Imprimir
Expandir todo
Este tema aún no ha recibido ninguna valoración - Valorar este tema

Cómo: Utilizar la seguridad basada en funciones con Servicios Empresariales

Publicado: 26 de junio de 2006

Consulte la Página de entrada como punto de partida y para obtener una descripción completa del documento Crear aplicaciones ASP.NET seguras.

Resumen: Servicios Empresariales (COM+) proporciona funciones con fines de autorización. En este artículo se muestra cómo crear y configurar un componente revisado para ofrecer seguridad de nivel de método basada en funciones.

En este artículo se describe cómo crear un sencillo componente revisado que utiliza funciones de Servicios Empresariales (ES, Enterprise Services) para la autorización.

Notas
Las funciones de ES no son las mismas que las de .NET.
Las funciones de ES pueden contener cuentas de grupo de Windows o cuentas de usuario de Windows.
Las funciones de ES se mantienen en el catálogo COM+.
Las funciones de ES se pueden aplicar en los niveles de aplicación, interfaz, clase o método (de ES).
Las funciones de ES se pueden configurar parcialmente de forma declarativa mediante atributos .NET en el ensamblado del componente revisado.
El administrador debe agregar cuentas de grupo y de usuario de Windows en el momento de la implementación.
Los administradores pueden utilizar la herramienta de administración Servicios de componentes o secuencias de comandos.
Para utilizar de forma eficaz la seguridad basada en funciones de Servicios Empresariales en una aplicación Web ASP.NET, ésta debe utilizar la autenticación de Windows y suplantar a los llamadores antes de llamar a los componentes revisados.

Requisitos

A continuación se describen las recomendaciones de hardware, software, infraestructura de red, conocimientos y Service Pack que se necesitan.
Sistema de desarrollo Microsoft® Visual Studio® .NET
Para llevar a cabo los procedimientos de este artículo, también es necesario que tenga conocimientos acerca del desarrollo Web en ASP.NET con Microsoft Visual C#™.

En esta página

Crear una aplicación de biblioteca de clases en C# que aloje el componente revisado Crear una aplicación de biblioteca de clases en C# que aloje el componente revisado
Crear el componente revisado Crear el componente revisado
Configurar el componente revisado Configurar el componente revisado
Generar un nombre seguro para el ensamblado Generar un nombre seguro para el ensamblado
Compilar el ensamblado y agregarlo a la caché de ensamblados global Compilar el ensamblado y agregarlo a la caché de ensamblados global
Registrar manualmente el componente revisado Registrar manualmente el componente revisado
Examinar la aplicación configurada Examinar la aplicación configurada
Crear una aplicación cliente de prueba Crear una aplicación cliente de prueba

Crear una aplicación de biblioteca de clases en C# que aloje el componente revisado

En este procedimiento se crea una nueva aplicación de biblioteca de clases en C# que contiene el componente revisado.

Para crear una aplicación de biblioteca de clases en C# que aloje el componente revisado

  1. Inicie Visual Studio .NET y cree una nueva aplicación de biblioteca de clases en C# con el nombre ServicedCom.

  2. Cambie el nombre del archivo de clase predeterminado Class1.cs por SimpleComponent.cs.

  3. Haga doble clic en SimpleComponent.cs para abrirlo y cambie el nombre del tipo Class1 por SimpleComponent. Actualice también el nombre del constructor predeterminado de la clase.

Crear el componente revisado

En este procedimiento se deriva la clase SimpleComponent de la clase EnterpriseServices.ServicedComponent para convertir este tipo en un componente revisado. Después se creará una interfaz y se implementará en la clase SimpleComponent. Para utilizar la seguridad de nivel de interfaz y método, debe definir interfaces e implementarlas.

Para crear el componente revisado

  1. Agregue una referencia al ensamblado System.EnterpriseServices.

  2. Al principio del archivo SimpleComponent.cs, agregue la siguiente instrucción using debajo de las instrucciones using existentes.

    using System.EnterpriseServices;
    
  3. Derive la clase SimpleComponent de ServicedComponent.

    public class SimpleComponent : ServicedComponent
    
  4. Agregue la siguiente definición de interfaz en el espacio de nombres ServicedCom.

    public interface ISomeInterface
       {
       int Add( int operand1, int operand2 );
       }
    
  5. Derive SimpleComponent de esa interfaz.

    public class SimpleComponent : ServicedComponent, ISomeInterface
    
  6. Implemente la interfaz en la clase SimpleComponent como se indica a continuación.

    public int Add( int operand1, int operand2 )
       {
       return operand1 + operand2;
       }
    

Configurar el componente revisado

En este procedimiento se configura el componente revisado para la seguridad de nivel de método basada en funciones.

Para configurar el componente revisado

  1. Agregue los siguientes atributos justo encima de la clase SimpleComponent. El atributo ComponentAccessControl permite las comprobaciones de acceso en el nivel de componente y el atributo SecureMethod permite las comprobaciones de acceso en el nivel de método.

    [ComponentAccessControl]
       [SecureMethod]
       public class SimpleComponent : ServicedComponent, ISomeInterface
    
  2. Agregue el siguiente atributo encima del método Add para crear la función Manager y asociarla al método.

    [SecurityRole("Manager")]
       public int Add( int operand1, int operand2 )
       {
       return operand1 + operand2;
       }
    
  3. Abra assemblyinfo.cs y agregue la siguiente instrucción using al principio del archivo, justo debajo de las instrucciones using existentes.

    using System.EnterpriseServices;
    
  4. Desplácese hasta el final del archivo y agregue los siguientes atributos. Estos atributos se utilizan para configurar la aplicación de Servicios Empresariales que aloja el componente revisado.

    // Configure the application as a server (out-of-process) application
       [assembly: ApplicationActivation(ActivationOption.Server)]
       // For meaningful role-based security, enable access checking at the process    
       // and component levels by using the following .NET attribute.
       [assembly: ApplicationAccessControl(AccessChecksLevel= 
       AccessChecksLevelOption.ApplicationComponent)]
       // Set the name and description for the application
       [assembly: ApplicationName("SimpleRoles")]
       [assembly: Description("Simple application to show ES Roles")]
       // Add some additional roles
       [assembly:SecurityRole("Employee")]
       [assembly:SecurityRole("Senior Manager")]
    

Generar un nombre seguro para el ensamblado

Los ensamblados que alojan componentes revisados deben tener un nombre seguro. En este procedimiento se genera un par de claves, pública y privada, que se utilizan para asignar un nombre seguro al ensamblado.

Para generar un nombre seguro para el ensamblado

  1. Abra una ventana de comandos y vaya al directorio del proyecto actual.

  2. Utilice la herramienta sn.exe para generar un archivo de claves que contenga un par de claves pública y privada.

    sn.exe -k SimpleComponent.snk
    
  3. En Visual Studio, abra el archivo assemblyinfo.cs.

  4. Busque el atributo [AssemblyKeyFile] y modifíquelo para que haga referencia al archivo de claves que se encuentra en el directorio del proyecto, como se indica a continuación.

    [assembly: AssemblyKeyFile(@"..\..\SimpleComponent.snk")]
    

Compilar el ensamblado y agregarlo a la caché de ensamblados global

En este procedimiento se compila el ensamblado que contiene el componente revisado y, después, se agrega a la caché de ensamblados global. En general, los componentes revisados deben registrarse en la caché de ensamblados global porque constituyen recursos de nivel del sistema. Los componentes revisados que se alojan en aplicaciones de servidor de COM+ requieren su instalación en la caché de ensamblados global, mientras que las aplicaciones de biblioteca no lo requieren (aunque es recomendable).

Para compilar el ensamblado y agregarlo a la caché de ensamblados global

  1. En el menú Generar, haga clic en Generar solución.

  2. Vuelva a la ventana de comandos y ejecute el siguiente comando para agregar el ensamblado a la caché de ensamblados global.

    gacutil –i bin\debug\ServicedCom.dll
    

Registrar manualmente el componente revisado

Los componentes revisados se pueden registrar manualmente con la herramienta Regsvcs.exe o de forma automática mediante el registro "lento". Con el registro "lento", el componente se registra (y la aplicación COM+ que lo aloja se crea y configura con los metadatos del ensamblado) la primera vez que se crea una instancia del componente revisado.
Para evitar el impacto en el rendimiento del sistema, cuando se registra el componente al crear la primera instancia, en este procedimiento se realiza el registro manual del componente revisado.

Para registrar manualmente el componente revisado

  1. Vuelva a la ventana de comandos.

  2. Ejecute regsvcs.exe para registrar el componente.

    regsvcs bin\debug\ServicedCom.dll
    

Examinar la aplicación configurada

En este procedimiento se utiliza la herramienta Servicios de componentes y se examina la configuración del catálogo resultante del uso de los atributos .NET anteriores.

Para examinar la aplicación configurada

  1. Desde el grupo de programas Herramientas administrativas, inicie Servicios de componentes.

  2. Haga clic con el botón secundario del mouse (ratón) en SimpleRoles y, a continuación, haga clic en Propiedades.

  3. Haga clic en la ficha Seguridad y asegúrese de que la opción Exigir comprobación de accesos para esta aplicación está seleccionada y de que el nivel de seguridad está configurado para realizar comprobaciones de acceso en el nivel de proceso y componente. Esta configuración es el resultado de los atributos .NET que se utilizaron anteriormente.

  4. Haga clic en la ficha Seguridad y asegúrese de que la opción Exigir comprobación de accesos para esta aplicación está seleccionada y de que el nivel de seguridad está configurado para realizar comprobaciones de acceso en el nivel de proceso y componente. Esta configuración es el resultado de los atributos .NET que se utilizaron anteriormente.

  5. Haga clic en Aceptar para cerrar el cuadro de diálogo Propiedades.

  6. Expanda la aplicación SimpleRoles y, después, expanda la carpeta Componentes y la clase ServicedCom.SimpleComponent.

  7. Llegue hasta el método Add situado debajo del método ISomeInterface en la carpeta Interfaces.

  8. Haga clic con el botón secundario en Add y, a continuación, haga clic en Propiedades.

  9. Haga clic en la ficha Seguridad y observe que la función Manager está asociada al método.

  10. Haga clic en Aceptar para cerrar el cuadro de diálogo Propiedades.

  11. Expanda la carpeta Funciones situada debajo de la aplicación SimpleRoles. Observe las funciones que creó anteriormente con atributos .NET. Observe también la función Marshaler. Esta función se crea como consecuencia del atributo [SecureMethod] que se agregó anteriormente y es necesaria para la seguridad de nivel de método.

Crear una aplicación cliente de prueba

En este procedimiento se crea una aplicación cliente de prueba basada en Windows Forms para crear una instancia del componente revisado y llamarlo.

Para crear una aplicación cliente de prueba

  1. Agregue una nueva referencia de proyecto al proyecto ServicedCom.

  2. Agregue una nueva referencia de proyecto al proyecto ServicedCom.
    a. En el Explorador de soluciones, haga clic con el botón secundario en Referencias y, después, haga clic en Agregar referencia.
    b. Haga clic en la ficha Proyectos.
    c. Seleccione ServicedCom, haga clic en Seleccionar y, después, en Aceptar.

  3. Agregue una referencia a System.EnterpriseServices.

  4. Agregue un botón al formulario principal de la aplicación.

  5. Haga doble clic en el botón para crear un controlador de eventos de clic.

  6. Al principio del archivo form1.cs, agregue la siguiente instrucción using debajo de las instrucciones using existentes.

    using ServicedCom;
    
  7. Vuelva al controlador de eventos de clic y agregue el siguiente código para crear una instancia del componente revisado y llamarlo.

    SimpleComponent comp = new SimpleComponent();
       MessageBox.Show( "Result is: " + comp.Add(1, 2));
    
  8. En el menú Generar, haga clic en Generar solución.

  9. En el Explorador de soluciones, haga clic con el botón secundario en el proyecto TestClient y, a continuación, haga clic en Establecer como proyecto de inicio.

  10. Presione Ctrl+F5 para ejecutar la aplicación TestClient.
    Debería generarse una excepción no controlada.

  11. Haga clic en el botón Detalles del cuadro de mensaje para ver los detalles de la excepción.
    Verá que se ha generado una excepción System.UnauthorizedAccessException. Esto se debe a que la cuenta de inicio de sesión interactiva que se utiliza para ejecutar la aplicación TestClient no es miembro de la función Manager, que es necesaria para llamar al método Add en el componente revisado.

  12. Haga clic en Salir para detener la aplicación.

  13. Vuelva a Servicios de componentes y agregue la cuenta (interactiva) actual a la función Manager y a la función Marshaler.
    Nota: la infraestructura de Servicios Empresariales utiliza una serie de interfaces de nivel del sistema expuestas por todos los componentes revisados. Entre ellas se incluyen IManagedObject, IDisposable e IServiceComponentInfo. Si las comprobaciones de acceso están habilitadas en el nivel de interfaz o método, se deniega el acceso de la infraestructura de Servicios Empresariales a dichas interfaces.
    Como consecuencia, Servicios Empresariales crea una función especial llamada Marshaler y la asocia a dichas interfaces. En el momento de la implementación, los administradores de aplicaciones deben agregar todos los usuarios a la función Marshaler que necesite tener acceso a los métodos o interfaces de la clase. Esto se puede automatizar de dos maneras distintas:

    1. Puede escribir una secuencia de comandos que utilice el modelo de objeto de Servicios de componentes para copiar todos los usuarios de otras funciones a la función Marshaler.

    2. Puede escribir una secuencia de comandos que asigne las demás funciones a estas tres interfaces especiales y eliminar la función Marshaler.

  14. Cierre la aplicación SimpleRoles para que los cambios surtan efecto. Para ello, haga clic con el botón secundario en el nombre de la aplicación y, después, haga clic en Apagar.

  15. Vuelva a Visual Studio .NET y presione Ctrl+F5 para ejecutar de nuevo la aplicación TestClient.

  16. Haga clic en el botón del formulario y confirme que la llamada al método se realiza correctamente.

¿Te ha resultado útil?
(Caracteres restantes: 1500)
Gracias por sus comentarios
Mostrar:
© 2014 Microsoft. Reservados todos los derechos.