2011-07-20 29 views
10

Actualmente estoy desarrollando una aplicación web MVC3 que necesita requerir usuarios de extranet para iniciar sesión y autenticarse mediante la Autenticación de formularios. Los usuarios de Intranet deberían iniciar sesión automáticamente usando la autenticación de Windows.
He encontrado este artículo, http://aspalliance.com/553_Mixed_Mode_Authentication.all pero está fechado en noviembre de 2004 y me gusta encontrar algo escrito hace más de 7 años.ASP.NET Formularios mixtos/Autenticación de Windows

Mi plan es tener dos aplicaciones en IIS, con directorios virtuales que apuntan al mismo directorio físico, pero uno va a permitir el acceso anónimo y el otro no.

Cuando un usuario se autentica en el lado de Windows/Intranet de las cosas, espero simplemente simular el usuario que inicia sesión en medio de autenticación de formularios. ¿Hay algún inconveniente en este enfoque? Alguna mejor idea?

EDIT: 7/22/2011

estoy usando IIS7 que no permitirá que haga muchas de las cosas que se sugieren en los artículos más antiguos. Debido a que la autenticación se integra un poco más entre IIS7 y los sitios web de ASP.NET, ciertas cosas no están permitidas. Por ejemplo, no puedo configurar Windows Auth en un solo archivo mientras que el resto de la aplicación usa Forms Auth.

+0

¿Cómo planea simular el inicio de sesión de usuario con formularios? ¿Vas a crear usuarios en las tablas de membresía ASP para ellos? – Erix

+0

Sí. Cada usuario de Windows tendrá roles (Grupos en Windows) que corresponderán a un Usuario en membresía asp. Por lo tanto, si están en el grupo de administración en Windows, se iniciarán sesión como un usuario administrador en los formularios. Para los usuarios de Windows, solo habrá tantos roles como usuarios en las tablas de membresía de ASP, cada uno con una relación uno a uno (usuario a cargo). –

Respuesta

3

Preguntando si el mejor enfoque aquí no sería tener dos aplicaciones donde la primera aplicación usa la autenticación de Windows y consiste únicamente en un enlace al evento PostAuthenticate en la canalización HTTP. Si el usuario está autenticado, les da un ticket de formularios y lo redirecciona a la aplicación de destino, App2, que usa autenticación de formularios. Debe tener cuidado de que las cookies no sean específicas de la ruta y que las dos aplicaciones residan en el mismo servidor (o que las claves de cifrado estén sincronizadas en web.config). Si el usuario no está autenticado, simplemente redirigirlos sin un ticket de autenticación e iniciar sesión cuando llegue a App2.

App1: www.myUrl.com \ MiApl

Ésta es la url "público" para la aplicación y detecta usuarios de la red mediante la conexión en el caso PostAuthenticate (ver Professional ASP.NET 2.0 Security, Membership, and Role Management):

//Hook PostAuthenticateRequest inside of global.asax 
void Application_PostAuthenticateRequest(Object sender, EventArgs e) 
{ 
    IPrincipal p = HttpContext.Current.User; 

    if (p.Identity.IsAuthenticated) 
    { 
     // to do: give them a non-path specific ticket and redirect to App2 
    } 
} 

App2: www.myUrl.com \ MyApp2

Esta es la aplicación real. Cuando los usuarios de la red llegan desde App1, ya tienen un ticket de formularios. Cuando lleguen usuarios que no pertenecen a la red, se los redireccionará a login.aspx.

Notas: Una desventaja de esto sería si los usuarios de la red Favorito App2. No estoy muy seguro de cómo solucionaría esto. Si tienen una cookie que no expira, no importaría demasiado. Una opción sería poner un enlace en la página de inicio de sesión que diga algo así como: "Ya soy usuario de la red: inicie sesión automáticamente", que se vincularía a la aplicación 1, donde se iniciarían sesión.

Tengo un código para ayudar a emitir un ticket de formularios. Actualizaré la respuesta porque tengo tiempo.

Tenga en cuenta que tendrá que realizar un trabajo de gestión de roles sofisticado en App2 para manejar los diferentes proveedores de roles.La referencia anterior de Amazon es antigua, pero me encuentro constantemente haciendo referencia a ella cuando me encuentro con este tipo de problemas personalizados de Autenticación y Autorización.

+0

Gracias por la entrada Brett. El inicio de sesión para los usuarios de la red no es crítico, pero el cliente lo desea. Continuaré considerando mis opciones, incluida la suya, cuando tenga que implementar esta funcionalidad. –

+0

He seguido esta ruta. Hubo muchos obstáculos por superar, pero funciona en su mayor parte. Agregué la URL del sitio de autenticación de Windows (Sitio1) al dominio del sitio de intranet local, por lo que los usuarios inician sesión automáticamente y luego se redirigen a Sitio2. –

0

Esto es perfectamente posible, si va a crear dos aplicaciones diferentes en IIS, ¡entonces su trabajo está hecho! =)

+0

No con IIS7. Cuando cambia la aplicación en IIS7 de la autenticación de Formularios a Windows, o viceversa, modifica la WebConfig para el proyecto. Tendré dos aplicaciones, pero ambas señalarán el mismo directorio físico en el archivo. Cambiar el tipo de autenticación en una aplicación afecta al otro. –

Cuestiones relacionadas