2009-03-12 15 views
5

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

¿Cuál es la mejor manera de lograrlo con la autenticación de Windows?

Respuesta

3

Tal vez usted podría crear su "ExtendedWindowsPrincipal" como una clase derivada basado en WindowsPrincipal, y sólo tiene que añadir sus datos adicionales a la clase derivada?

esta manera, su ExtendedWindowsPrincipal todavía se reconocería en cualquier lugar donde se necesite una WindowsPricinpal.

O: ya que está hablando de usar Autenticación de Windows, probablemente esté en una red de Windows. ¿Existe alguna base de datos de Active Directory o de usuario en la que pueda buscar su dirección de correo electrónico? interesado en lugar de almacenarlo en el principal?

Marc

+0

la creación de una clase derivada era mi idea, pero no estoy seguro de si es aconsejable sustituir el IPrincipal y cómo está hecho correctamente Tengo la intención de buscar la dirección de correo electrónico del directorio, pero mi idea era recopilar toda la información del usuario en un solo lugar, al igual que lo he hecho w. autenticación personalizada. – PHeiberg

+0

No veo ningún problema para reemplazar un WindowsPrincipal por su propio ExtendedWindowsPrincipal, si se trata de una clase derivada. Después de todo, sigue siendo un WindowsPrincipal, con algunas cosas adicionales. Para hacerlo, investigaría global.asax y Application_AuthenticateRequest. –

+0

Tuve problemas para intentar que IsInRole siguiera funcionando y no quería invertir el tiempo en utilizar IPrincipal, así que terminé colocando el resto de la información del usuario en los elementos del contexto. Gracias por la ayuda. – PHeiberg

3

que terminó refactorización mi solución inicial en sustitución de la directora 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 i sustituyen al director en la HttpContext así:

var currentUser = (WindowsIdentity)HttpContext.Current.User.Identity; 
HttpContext.Current.User = 
    new ExtendedWindowsPrincipal(currentUser, userEmail); 
+0

gracias por el mensaje, estado golpeándome la cabeza desde hace unas horas. Se encontró con los mismos problemas de seguridad ... wtf! ¿derecho? Su solución funciona, muchas gracias! –

Cuestiones relacionadas