Compartir a través de


Fundamentos de las operaciones de usuarios de .NET Framework

Actualización: noviembre 2007

.NET Framework proporciona una implementación de seguridad basada en funciones en el espacio de nombres System.Security.Principal, que puede utilizar para autorizar y autenticar a los usuarios en su aplicación. Este tema trata de cómo trabajar con autorización de la aplicación en .NET Framework y crear los objetos IIdentity y IPrincipal para representar a los usuarios.

Una IIdentity encapsula un usuario autenticado. IPrincipal es una combinación de la identidad del usuario y cualquier función que tenga asignada. Puede utilizar la identidad predefinida y las clases principales del espacio de nombres System.Security.Principal, o bien agregar autenticación personalizada creando clases que implementen las interfaces.

Para utilizar estas interfaces, debe utilizar los nombres completos de interfaz o importar los espacios de nombres adecuados incluyendo las instrucciones Imports al principio del archivo de código fuente afectado. Para obtener más información, vea Instrucción Imports (Tipo y espacio de nombres de .NET).

Seguridad basada en funciones en las aplicaciones de .NET Framework

Cada subproceso de aplicación puede tener un objeto principal asociado (accesible mediante la propiedad CurrentPrincipal) que representa el contexto de seguridad del usuario en cuyo nombre se está ejecutando el código. Un objeto principal encapsula el objeto de contexto (o identidad) de seguridad de un usuario. Utilizar dos objetos permite una separación de la autenticación (en el objeto de identidad) y la autorización (en el principal).

Un objeto de identidad debe implementar la interfaz IIdentity. Un objeto de identidad representa a un usuario determinado y expone las propiedades siguientes como requeridas por la interfaz IIdentity: Name, IsAuthenticated y AuthenticationType. Los objetos de identidad tienen normalmente miembros privados adicionales que realizan la autenticación de usuarios.

Un objeto principal debe implementar la interfaz IPrincipal. Un objeto principal encapsula el contexto de seguridad del usuario exponiendo los miembros siguientes como lo requiere la interfaz IPrincipal: el método IsInRole, que realiza la autorización, y la propiedad Identity, que proporciona el acceso al objeto de identidad del usuario.

Trabajar con identidades

.NET Framework proporciona cuatro clases que implementan la interfaz IIdentity:

Cada clase le permite trabajar con diferentes tipos de identidades del usuario. Para tener acceso al objeto WindowsIdentity actual para una aplicación que utiliza la autenticación de Windows, utilice el método estático GetCurrent de la clase WindowsIdentity. También puede establecer el principal del subproceso actual llamando al My.User.InitializeWithWindowsUser (Método).

También puede crear las clases de identidad personalizadas implementando la interfaz IIdentity en su propia clase personalizada. Para obtener más información acerca de cómo crear identidades personalizadas, vea Tutorial: Implementar autenticación y autorización personalizadas.

Trabajar con principales

.NET Framework proporciona la interfaz IPrincipal para vincular funciones e identidades de usuario. Si su aplicación realiza la autorización, debería utilizar un objeto que implemente IPrincipal. Por ejemplo, las clases WindowsIdentity y GenericIdentity proporcionan implementaciones integradas de IPrincipal. Como alternativa, puede crear sus propias clases personalizadas de principal basadas en IPrincipal.

Puede vincular el subproceso actual a un objeto IPrincipal asignando el objeto a la propiedad CurrentPrincipal del subproceso o a la My.User.CurrentPrincipal (Propiedad). A continuación puede realizar una comprobación de la autorización probando si el usuario es un miembro de una función determinada. Esto se hace utilizando el método IsInRole del principal.

Las aplicaciones ASP.NET controlan los objetos IPrincipal de manera diferente a como lo hacen otras aplicaciones de .NET Framework. ASP.NET crea el aspecto de una sesión sobre el protocolo HTTP sin estado. Como parte de esta sesión, el objeto IPrincipal que representa al usuario está disponible en la propiedad User del objeto HttpContext para todo el código que ejecute la solicitud del usuario. Common Language Runtime actualiza automáticamente CurrentPrincipal con el valor User después del evento OnAuthenticate del archivo Global.asax. Las aplicaciones ASP.NET utilizan a menudo la propiedad User para realizar las comprobaciones de autorización.

Nota:

Cambiar manualmente User actualiza automáticamente la propiedad CurrentPrincipal para todos los subprocesos que se ejecutan dentro del mismo contexto HTTP. Sin embargo, cambiar CurrentPrincipal no afecta a la propiedad User. Afecta sólo al subproceso elegido para el resto de la solicitud.

En aplicaciones ASP.NET, My.User.CurrentPrincipal (Propiedad) actualiza la propiedad User.

Para obtener más información sobre cómo crear sus propios tipos IPrincipal, vea Tutorial: Implementar autenticación y autorización personalizadas.

Conceder permisos para trabajar con los objetos IIdentity e IPrincipal

Se debe tener cautela al conceder los permisos para trabajar con objetos IIdentity, porque estos objetos hacen que esté disponible la información confidencial relacionada con el usuario. Debería proteger el objeto IPrincipal actual de la aplicación contra los cambios porque la función de autorización de la aplicación está basada en su principal actual.

.NET Framework proporciona esta protección requiriendo que estas operaciones tengan el permiso de seguridad de acceso a código. Conceda el permiso SecurityPermissionAttribute.ControlPrincipal a las aplicaciones que necesitan manipular estos objetos utilizando Herramienta de la directiva de seguridad de acceso a código (Caspol.exe).

De manera predeterminada, todas las aplicaciones instaladas localmente tienen este permiso porque se ejecutan bajo el conjunto de permisos de plena confianza (FullTrust).

Para ejecutar los métodos siguientes se requiere el permiso ControlPrincipal:

Vea también

Tareas

Tutorial: Implementar autenticación y autorización personalizadas

Referencia

My.User (Objeto)

Otros recursos

Autenticación y autorización en .NET Framework con Visual Basic