Compartir a través de


Objetos Principal e Identity

Nota

Este artículo se aplica a Windows.

Para obtener más información sobre ASP.NET Core, vea Seguridad de ASP.NET Core.

El código administrado puede averiguar la identidad o el rol de una entidad de seguridad por medio de un objeto IPrincipal, que contiene una referencia a un objeto IIdentity. La comparación de objetos Identity y Principal puede resultar útil en conceptos familiares, como cuentas de usuario y de grupo. En la mayoría de los entornos de red, las cuentas de usuario representan a personas o programas, mientras que las cuentas de grupo representan a ciertas categorías de usuarios y los derechos que poseen. Del mismo modo, los objetos de identidad de .NET representan a usuarios, mientras que los roles representan pertenencias y contextos de seguridad. En .NET, el objeto de entidad de seguridad encapsula un objeto de identidad y un rol. Las aplicaciones de .NET conceden derechos a la entidad de seguridad en función de su identidad o, lo que es más normal, su pertenencia a un rol.

Objetos Identity

El objeto Identity encapsula información sobre el usuario o la entidad que se está validando. En su nivel más básico, los objetos Identity contienen un nombre y un tipo de autenticación. El nombre puede ser un nombre de usuario o el nombre de una cuenta de Windows, mientras que el tipo de autenticación puede ser un protocolo de inicio de admisión admitido, como Kerberos V5, o un valor personalizado. .NET define un objeto GenericIdentity que se puede usar en la mayoría de los escenarios de inicio de sesión y un objeto WindowsIdentity más especializado que se puede usar si se quiere que la aplicación se base en la autenticación de Windows. Además, puede definir la clase de identidad propia que encapsula la información personalizada del usuario.

La interfaz IIdentity define propiedades para el acceso a un nombre y un tipo de autenticación, como Kerberos V5 o NTLM. Todas las clases Identity implementan la interfaz IIdentity. No hay una relación necesaria entre un objeto Identity y el token de proceso de Windows en el que se está ejecutando actualmente un subproceso. Pero si el objeto Identity es un objeto WindowsIdentity, se da por hecho que la identidad representa a un token de seguridad de Windows.

Objetos Principal

El objeto Principal representa el contexto de seguridad bajo el cual se ejecuta código. Las aplicaciones que implementan seguridad basada en roles conceden derechos tomando como base el rol asociado a un objeto Principal. Igual que los objetos de identidad, .NET proporciona un objeto GenericPrincipal y un objeto WindowsPrincipal. También puede definir sus propias clases de entidad de seguridad personalizadas.

La interfaz IPrincipal define una propiedad para el acceso a un objeto Identity asociado, así como un método para determinar si el usuario identificado por el objeto Principal es miembro de un rol determinado. Todas las clases Principal implementan la interfaz IPrincipal, así como las propiedades y métodos adicionales necesarios. Por ejemplo, Common Language Runtime proporciona la clase WindowsPrincipal, que implementa funcionalidad adicional para asignar la pertenencia a grupos a roles.

Un objeto Principal está enlazado a un objeto de contexto de llamada (CallContext) en un dominio de aplicación (AppDomain). Un contexto de llamada predeterminado se crea siempre con cada dominio AppDomain nuevo, por lo que siempre hay un contexto de llamada disponible para aceptar el objeto Principal. Cuando se crea un subproceso nuevo, también se crea un objeto CallContext para el subproceso. La referencia del objeto Principal se copia automáticamente desde el subproceso creador en el objeto CallContext del subproceso nuevo. Si el tiempo de ejecución no puede determinar qué objeto Principal pertenece al creador del subproceso, sigue la directiva predeterminada para la creación de objetos Principal e Identity.

Una directiva específica de dominio de aplicación configurable define las reglas para decidir qué tipo de objeto Principal se ha de asociar a un dominio de aplicación nuevo. Cuando la directiva de seguridad lo permite, el tiempo de ejecución puede crear objetos Principal e Identity que reflejan el token de sistema operativo asociado al subproceso actual de ejecución. De forma predeterminada, el tiempo de ejecución utiliza objetos Principal e Identity que representan a usuarios no autenticados. El tiempo de ejecución no crea estos objetos Principal y Identity predeterminados hasta que el código trata de tener acceso a ellos.

El código de confianza que crea un dominio de aplicación puede establecer la directiva de dominio de aplicación que controla la construcción de los objetos Principal e Identity predeterminados. Esta directiva específica de dominio de aplicación se aplica a todos los subprocesos de ejecución de dicho dominio. Un host de confianza no administrado tiene la capacidad inherente de establecer esta directiva, pero el código administrado que la establece debe tener el permiso System.Security.Permissions.SecurityPermission para controlar la directiva de dominio.

Cuando se transmite un objeto Principal a través de dominios de aplicación, pero dentro del mismo proceso (y, por tanto, en el mismo equipo), la infraestructura de comunicación remota copia una referencia en el objeto Principal asociado al contexto de quien efectúa una llamada en el contexto de quien la recibe.

Consulte también