net mvc custom asp c# .net iprincipal iidentity

c# - mvc - iprincipal implementation



¿Cuál es la idea detrás de IIdentity e IPrincipal en.NET? (4)

Como dice el sitio de MSDN :

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.

mientras

El objeto principal representa el contexto de seguridad bajo el cual se está ejecutando el código.

Consulte el enlace de arriba para obtener mucha más información.

HTH

Entonces, ¿cuál es el propósito de existencia de IIdentity e IPrincipal , y no de IIdentityMergedWithPrincipal ? ¿Cuándo no es suficiente implementar ambos en la misma clase?

Además, para entender el propósito, me gustaría saber de dónde viene este concepto:

  • Se originó en .Net
  • Existe el concepto de Identidad / Principal como patrón de diseño, que System.Security.Principal implementó en esas interfaces
  • Se origina en otro lugar y es compatible con la compatibilidad

Por lo tanto, ¿ UserPrincipal de System.DirectoryServices actúa de forma similar a IPrincipal pero no lo implementa por accidente o por intención?

PD: Estoy buscando el razonamiento detrás de la idea, no la comparación de beneficios / controversias, así que intente no iniciar una discusión basada en la opinión


Un principal es el contexto de seguridad de un usuario.

En el caso de .NET, un principal respalda el concepto de tener más de una identidad (Esto no tiene nada que ver aún con los reclamos). Esto es particularmente importante cuando se trata de la semántica con la que los desarrolladores deben lidiar cuando se trata de la identidad del usuario. Es posible que se le pida como desarrollador para que admita múltiples identidades provenientes de diferentes fuentes (IdP de proveedores de identidad), por ejemplo: Twitter, Google, lo que sea.

Entonces, ¿cuál es la diferencia entre un IPrincipal e IIDentity? IPrincipal es el contexto de seguridad (para un único hilo) y IIDentity es el conjunto de atributos asociados con ese usuario que proviene de un proveedor / autoridad de identidad específico.


IIdentity solo se utiliza para la identidad autenticada del usuario, independientemente de los roles que pueda tener.

IPrincipal se usa para combinar la identidad de un usuario con las funciones autorizadas que tienen en un contexto de seguridad dado.

Por ejemplo, puede usar un proveedor de inicio de sesión de terceros, como Facebook o Google, para obtener la identidad del usuario, pero no obtendrá un principal de esos proveedores, ya que no proporcionan ninguna función. Puede usar su propia aplicación o un proveedor de autorizaciones basado en roles de terceros para aplicar funciones, por ejemplo, a una GoogleIdentity FacebookIdentity o GoogleIdentity . Una aplicación diferente puede esperar un principal diferente, con sus propios roles, pero aún usar la misma identidad que en otra aplicación.


public class HBPrincipal : IPrincipal { private HBIdentity _identity; public HBPrincipal(HBIdentity identity) { _identity = identity; } public IIdentity Identity { get { return _identity; } } public bool IsInRole(string role) { // TODO implement roles return false; } }