Establecer principales y directiva de seguridad basada en funciones
Actualización: noviembre 2007
La seguridad basada en funciones permite a un componente identificar los usuarios actuales y sus funciones asociadas en tiempo de ejecución. Después, esta información se asigna mediante una directiva de seguridad de acceso del código para determinar el conjunto de permisos que se concede en tiempo de ejecución. Para un dominio de aplicación dado, el host puede cambiar la directiva de seguridad predeterminada basada en funciones y establecer un principal de seguridad predeterminado. Un principal de seguridad representa un usuario y las funciones asociadas al mismo.
Normalmente, la seguridad basada en funciones se utiliza para implementar esquemas de autenticación personalizados. Por ejemplo, el host ASP.NET utiliza la seguridad basada en funciones para implementar un esquema de autenticación basada en la información de usuario que obtiene de Internet Information Services (IIS).
La definición de usuario y de funciones de usuario es específica de cada aplicación. Una aplicación puede tener un concepto de usuario diferente de Windows. Por ejemplo, una aplicación podría preguntar al usuario su nombre de usuario y contraseña al iniciar una sesión de la aplicación. Este nombre de usuario y esta contraseña son independientes del nombre de usuario y contraseña con los que el usuario inició una sesión en Windows.
Configurar explícitamente el principal para un subproceso
Si se ha establecido el principal para un subproceso, se omite la directiva del dominio de aplicación y el principal predeterminado. Por ejemplo, el subproceso podría haber establecido a su propio principal mediante la propiedad estática CurrentPrincipal (propiedadShared en Visual Basic) de la clase Thread. Alternativamente, el subproceso podría haber adquirido su principal del subproceso que lo inició.
Nota: |
---|
En la versión 2.0 de .NET Framework, cuando un subproceso inicia otro o pone en cola un elemento de trabajo para que lo ejecute el grupo de subprocesos, el contexto del subproceso (incluida la entidad principal de seguridad) fluye automáticamente al subproceso secundario o al subproceso del grupo de subprocesos. En las versiones 1.0 y 1.1 de .NET Framework, el contexto fluye sólo a los subprocesos iniciados por un subproceso, no a los subprocesos del grupo de subprocesos. |
Si un subproceso que no tiene un principal de seguridad realiza una acción que requiere un principal, se proporciona uno basado en la directiva de seguridad del dominio de aplicación actual y en el principal de seguridad predeterminado.
Nota: |
---|
Cuando un subproceso que no tiene un principal de seguridad utiliza la propiedad estática CurrentPrincipal para consultar a su principal, los valores predeterminados del dominio de aplicación se utilizan para establecer el principal. Es decir, CurrentPrincipal nunca devuelve null. |
Directiva y principal predeterminado para un dominio de aplicación
Un host puede establecer un principal predeterminado para un dominio de aplicación llamando al método SetThreadPrincipal. Si se ha proporcionado un principal predeterminado, se asigna a cualquier subproceso que se ejecute en el dominio de aplicación, requiera un principal y aún no lo tenga.
Nota: |
---|
El principal predeterminado no se aplica automáticamente al subproceso que llama SetThreadPrincipal, aunque ese subproceso no tenga un principal. Si el subproceso posterior requiere un principal y no ha adquirido uno mientras tanto, se asigna un principal según el principal predeterminado y la directiva del dominio de aplicación en el que se está ejecutando en ese momento. |
Si no se ha establecido un principal predeterminado para el dominio de aplicación, se asigna uno al subproceso según la directiva para el dominio de aplicación. De forma predeterminada, la directiva de un dominio de aplicación es asignar un principal genérico no autenticado al subproceso. Un host puede cambiar esta directiva para un dominio de aplicación llamando al método SetPrincipalPolicy. Por ejemplo, el código administrado siguiente crea un dominio de aplicación y establece su directiva para utilizar al principal de Windows actual.
Dim ad As AppDomain = AppDomain.CreateDomain("Child")
ad.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal)
AppDomain ad = AppDomain.CreateDomain("Child");
ad.SetPrincipalPolicy(PrincipalPolicy.WindowsPrincipal);
AppDomain^ ad = AppDomain::CreateDomain("Child");
ad->SetPrincipalPolicy(PrincipalPolicy::WindowsPrincipal);
Un host no administrado puede obtener acceso a los dominios de aplicación mediante la interfaz _AppDomain, que conserva el orden vtable entre versiones de .NET Framework.