2009-09-10 24 views
6

He creado un sistema de inicio de sesión personalizado para mi aplicación web asp.net mvc 1.0 ya que almaceno grandes cantidades de datos de usuario para cada usuario (decidí no intentar agregar tablas personalizadas para las ventanas autenticación debido a esto). El sistema de inicio de sesión utiliza básicamente SQL Server (2005 o 2008) y mi propia estructura de base de datos y tablas, que es bastante estándar. Una tabla de usuarios con una identificación única, nombre de usuario y contraseña hash que está vinculada a mis otras tablas de datos relacionados con el usuario.Autenticación de Windows con ASP.NET MVC

Mi pregunta es, ¿cómo puedo vincular mi sistema para utilizar los inicios de sesión de autenticación de Windows. Me gustaría permitir que el administrador para un usuario (como se define en mi sistema) seleccione un inicio de sesión de Autenticación de Windows y tal vez agregue un valor a algo en mi tabla personalizada que pueda usar para autenticarlos.

Probablemente la pregunta está mal formulada y podría haber entendido mal cómo funciona la Autenticación de Windows, pero me gustaría ofrecer la opción en mi aplicación web.

+0

No sé la respuesta exacta pero: creo que para trabajar con la autenticación de Windows necesitaría configurar el directorio activo y tener un usuario para cada persona en su red. Entonces, creo que debes hacerte pasar por el usuario de asp.net con web.config y deberías estar listo. – rball

Respuesta

8

Si ha activado la autenticación de Windows en su sitio, entonces debería ser capaz de utilizar User.Identity.Name para conseguir su Active Directory/NT nombre de usuario del usuario actualmente conectado, y haga coincidir eso con una columna en su tabla de usuarios.

+0

Utilicándolo en mi actionfilter HttpContext.Current.User.Identity.Name Puedo acceder a mi nombre de usuario (MACHINE \ PHIL) y se establece IsAuthenticated. ¿Entonces todo lo que necesito hacer es agregar otra columna a mi tabla de usuarios para asociar mi nombre de usuario a User.IDentity.Name y verificar que estén autenticados? – Phil

+1

Si User.Identity.Name devuelve un valor, ESTÁN autenticados. Y más al punto, no deberían poder acceder a la página a menos que estén autenticados (IIS les obligará a autenticar antes de que represente la página). – Scrappydog

1

Si entiendo su pregunta correctamente, ¿desea agregar algunos otros datos vinculados a un nombre de usuario autenticado de Windows?

Si es así, deberá guardar el nombre de usuario y esta información personalizada en una nueva tabla. Los datos de autenticación de Windows existen en Active Directory para que pueda ver allí para obtener una lista de usuarios. No obtendrá información personalizada añadida a AD automáticamente cuando Windows autentique al usuario. Si desea cualquier información personalizada, deberá agregar una búsqueda personalizada en AD para ello o simplemente buscar sus datos personalizados en su base de datos dependiendo de dónde decida almacenar la información.

Casi todo lo que obtiene con la Autenticación de Windows es el nombre de usuario del usuario y la capacidad de verificar los roles (grupos de AD) asociados con ese usuario. Cualquier cosa más allá de eso necesitarás codificar manualmente.

Hace poco pregunté sobre la implementación de la personalización más allá de la seguridad incorporada en MVC y se me ocurrió una solución por mi cuenta. Tal vez hay algunos datos que podrían ayudar a responder a su pregunta:

How to implement authorization checks in ASP.NET MVC based on Session data?

+0

Comentario útil, algunas buenas lecturas de fondo y otras ideas. – Phil

8

Así es como lo hemos hecho de una forma/ventanas aplicación de autenticación híbrida: -

public class MyBaseController 
{ 
    protected override void OnAuthorization(AuthorizationContext authContext) 
    { 
    if 
    (
     !User.Identity.IsAuthenticated && 
     Request.LogonUserIdentity != null && 
     Request.LogonUserIdentity.IsAuthenticated 
    ) 
    { 
     String logonUserIdentity = Request.LogonUserIdentity.Name; 
     if (!String.IsNullOrEmpty(logonUserIdentity)) 
     { 
     User loginUser = 
      Context.Users.FirstOrDefault(
      x => x.UserIdentity == logonUserIdentity); 
     if (loginUser != null) 
      FormsAuthentication.SetAuthCookie(
      loginUser.LoginName,createPersistentCookie); 
    } 
    } 

Hay un poco de encapsulación que he tomado por el bien de la compacidad.

+0

¡Gracias por el útil fragmento de código! :) – Phil

+0

Iain, ¿te importaría postear más del código?Me interesa encapsular adecuadamente esta funcionalidad Y cómo has configurado IIS (estoy usando IIS 7 por mi cuenta). Gracias. – wgpubs

Cuestiones relacionadas