Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Nota:
Este artículo se aplica a Windows.
Para obtener información sobre ASP.NET Core, consulte ASP.NET Core Security.
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. Puede resultar útil comparar objetos de identidad y objetos principales con conceptos conocidos como cuentas de usuario y de grupo. En la mayoría de los entornos de red, las cuentas de usuario representan personas o programas, mientras que las cuentas de grupo representan determinadas categorías de usuarios y los derechos que poseen. Del mismo modo, los objetos de identidad de .NET representan a los usuarios, mientras que los roles representan pertenencias y contextos de seguridad. En .NET, el objeto principal 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 de identidad
El objeto de identidad encapsula información sobre el usuario o la entidad que se está validando. En su nivel más básico, los objetos de identidad contienen un nombre y un tipo de autenticación. El nombre puede ser el nombre de un usuario o el nombre de una cuenta de Windows, mientras que el tipo de autenticación puede ser un protocolo de inicio de sesión compatible, como Kerberos V5 o un valor personalizado. .NET define un GenericIdentity objeto que se puede usar para la mayoría de los escenarios de inicio de sesión personalizados y un objeto más especializado WindowsIdentity que se puede usar cuando desea que la aplicación se base en la autenticación de Windows. Además, puede definir su propia clase de identidad que encapsula la información de usuario personalizada.
La IIdentity interfaz define las propiedades para acceder a un nombre y un tipo de autenticación, como Kerberos V5 o NTLM. Todas las clases Identity implementan la interfaz IIdentity . No hay ninguna relación necesaria entre un objeto Identity y el token de proceso de Windows en el que se ejecuta actualmente un subproceso. Sin embargo, si el objeto Identity es un objeto WindowsIdentity , se supone que la identidad representa un token de seguridad de Windows.
Objetos principales
El objeto principal representa el contexto de seguridad en el que se ejecuta el código. Aplicaciones que implementan seguridad basada en roles otorgan derechos en función del rol asociado a una entidad principal. De forma similar a los objetos de identidad, .NET proporciona un GenericPrincipal objeto y un WindowsPrincipal objeto . También puede definir sus propias clases principales personalizadas.
La IPrincipal interfaz define una propiedad para tener 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 principalesimplementan 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) dentro de un dominio de aplicación (AppDomain). Siempre se crea un contexto de llamada predeterminado con cada nuevo AppDomain, por lo que siempre hay un contexto de llamada disponible para aceptar el objeto Principal . Cuando se crea un nuevo subproceso, también se crea un objeto CallContext para el subproceso. La referencia al objeto Principal se copia automáticamente del subproceso de creación al 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 del dominio de aplicación configurable define las reglas para decidir qué tipo de objeto principal asociar a un nuevo dominio de aplicación. Cuando la directiva de seguridad permite, el entorno de ejecución puede crear objetos principal e identity que reflejen el token del sistema operativo asociado al subproceso actual de ejecución. De forma predeterminada, el tiempo de ejecución usa objetos Principal e Identity que representan usuarios no autenticados. El tiempo de ejecución no crea estos objetos Principal e Identity predeterminados hasta que el código intenta acceder 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 identidad predeterminados. Esta directiva específica del dominio de aplicación se aplica a todos los subprocesos de ejecución de ese dominio de aplicación. Un host de confianza no administrado inherentemente tiene la capacidad de establecer esta directiva, pero el código administrado que establece esta directiva debe tener la capacidad de controlar la directiva de dominio mediante System.Security.Permissions.SecurityPermission.
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.