Pregunta

¿Hay alguna buena forma de combinar la autenticación de Windows ASP.NET con un objeto IPrincipal / IIdentity personalizado? Necesito almacenar la dirección de correo electrónico del usuario y lo he hecho para la autenticación de formularios utilizando un par IIdentity / IPrincipal personalizado que agregué al Context.CurrentUser durante el evento AuthenticateRequest.

¿Cuál sería la mejor manera de lograr esto usando la autenticación de Windows?

¿Fue útil?

Solución

Tal vez podría crear su " ExtendedWindowsPrincipal " como una clase derivada basada en WindowsPrincipal, y solo agrega tus datos adicionales a la clase derivada?

De esa manera, su ExtendedWindowsPrincipal aún sería reconocido en cualquier lugar donde se necesita WindowsPricinpal.

O: dado que está hablando sobre el uso de la autenticación de Windows, probablemente esté en una red de Windows: ¿hay un Active Directory o una base de datos de usuario en algún lugar donde pueda buscar su dirección de correo electrónico que le interese? en lugar de almacenarlo en el principal?

Marc

Otros consejos

Terminé refactorizando mi solución inicial para reemplazar el Principal en lugar de la Identidad como pensaba originalmente. Reemplazar la identidad resultó problemático, ya que me encontré con problemas de seguridad al crear una instancia de un nuevo WindowsPrincipal extendido.

public class ExtendedWindowsPrincipal : WindowsPrincipal
{
    private readonly string _email;

    public ExtendedWindowsPrincipal(WindowsIdentity ntIdentity, 
       string email) : base(ntIdentity)
    {
            _email = email;
    }

    public string Email
    {
        get { return _email; }
    }
}

En mi módulo de autenticación, reemplacé el principal en el HttpContext así:

var currentUser = (WindowsIdentity)HttpContext.Current.User.Identity;
HttpContext.Current.User = 
    new ExtendedWindowsPrincipal(currentUser, userEmail);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top