2009-08-05 12 views
8

Tengo un servidor de desarrollo que ejecuta IIS 7.0 con una aplicación web ASP.NET MVC, que se autentica mediante la Autenticación/Membresía de formularios.IIS7 - Servidor de desarrollo de protección de contraseña

Necesito poder evitar que usuarios no autorizados vean este sitio. Sin embargo, nuestros clientes deberían poder ingresar un nombre de usuario/contraseña simple para obtener acceso.

Después de hacerlo, deberían poder interactuar con la aplicación web mediante la Autenticación de formularios como si acabaran de llegar a un sitio desprotegido.

¿Alguna sugerencia?

+2

Esto es una falla/un déficit absoluto en la parte de IIS7. Caso masivo de exceso de ingeniería y miopía de Microsoft aquí. Debería ser un botón de un solo clic "Añadir una contraseña emergente sucia barata", separado de todo el mundo académicamente hermoso y sobredimensionado de los complejos módulos de autenticación y basura que se les ocurrió. – Aaron

+0

Sorprende la cantidad de borrachos que parecen perfectamente dispuestos a aceptar esto y aguantarlo escribiendo sus propios módulos de envoltura personalizados y similares. Solo la gente total de ingeniería, consigue con el programa. Esto debería ser tan simple. No voy a escribir ningún código personalizado para implementar una contraseña emergente que solía tardar 2 segundos en configurarse. Tiene que haber una manera simple. – Aaron

+0

Me alegra ver que no es solo yo quien tiene este problema –

Respuesta

-1

Escribimos un módulo personalizado para IIS para permitir ciertos intervalos de IP de forma automática, y presentar a cualquier persona un diálogo de inicio de sesión. Una vez que iniciaron sesión, almacenó ese hecho en su sesión y simplemente pasó las solicitudes a través de.

Funciona bien, se puede aplicar a cualquier cosa en los sitios o servicios de IIS.

+0

No es bueno cuando mi ISP me da una IP dinámica totalmente aleatoria todo el tiempo.Tampoco es bueno cuando necesito dar acceso a un grupo selecto de probadores o socios comerciales, digamos 50 de ellos, que todos necesitan acceder al sitio de desarrollo. No puedo hacer que todos pasen una hora cada uno para buscar su dirección IP porque todos están ubicados en diferentes ubicaciones físicas y son personas de negocios, no personas técnicas. No tienen idea de cómo obtener su dirección IP de su enrutador/configuración de red, etc. Necesito simplemente poder enviarles un correo electrónico con una contraseña para que puedan acceder fácilmente al sitio. – Aaron

5

Mi respuesta anterior dijo que las formas auth y http auth podrían vivir una al lado de la otra en el modo integrado II7. Estaba completamente equivocado y desde entonces he hecho una solución simple.

Usando una costumbre HttpModule puede agregar autenticación básica junto a las formas de autenticación regular de

public class CustomBasicAuthHttpModule : IHttpModule 
{ 
    private HttpApplication httpApplicationContext; 

    public void Dispose() 
    { 
    } 

    public void Init(HttpApplication context) 
    { 
     this.httpApplicationContext = context; 
     context.BeginRequest += this.OnBeginRequest; 
     context.EndRequest += this.OnEndRequest; 
    } 

    private void OnBeginRequest(object sender, EventArgs e) 
    { 
     // your logic of checking Auth header goes here 
     if (this.httpApplicationContext.Request.Headers["Authorization"] != "Basic base64-encoded-user:pass") 
     { 
      this.httpApplicationContext.Response.StatusCode = 401; 
      this.httpApplicationContext.Response.End(); 
     } 
    } 

    private void OnEndRequest(object sender, EventArgs e) 
    { 
     if (this.httpApplicationContext.Response.StatusCode == 401) 
     { 
      this.httpApplicationContext.Response.AddHeader("WWW-Authenticate", "Basic"); 
     } 
    } 

entonces en su web.config

<system.webServer> 
    <modules> 
     <add name="CustomBasicAuthHttpModule" type="Namespace.CustomBasicAuthHttpModule, AssemblyName"/> 
    </modules> 
    </system.webServer> 
+0

En realidad, no es tan simple en mi caso. Su solución fue lo primero que probé, pero de alguna manera la "autenticación básica" interfiere con la "autenticación de formularios" del nuevo proyecto MVC más básico, como todos sabemos desde Visual Studio/New Project. Después de la autenticación a través de "autenticación básica", me redirigen a la url de inicio de sesión predeterminada todo lo que intento y mi navegador ni siquiera tiene permiso para descargar el archivo Site.css. ¿Alguna idea ?! –

+0

La autenticación básica de IIS no tendrá nada que ver con la autenticación de formularios, completamente diferente. La forma en que formuló su pregunta hizo que pareciera que desea bloquear todo acceso incluso a la página de inicio de sesión de formularios a cualquier persona que no sean sus clientes, pero una vez superada la respuesta-desafío de IIS, iniciarían sesión a través de la autenticación de formularios. No sé cómo hacer que IIS se autentique en nombre de los formularios sql, lo siento. Supongo que tampoco entiendo el punto, qué pasa con la autenticación de formularios, ¿por qué sería mejor una respuesta de desafío de IIS? – JeremyWeir

+0

Estás totalmente equivocado jayrdub. La pregunta fue bien explicada y este es un requisito muy común. El propio IIS establece que "la autenticación básica no se puede usar con ningún método de autenticación basado en redireccionamiento, como la autenticación de formularios". La "autenticación de Windows" también viene con la misma advertencia. Puede usar autenticación básica y de Windows sin problemas, siempre que no tenga la autenticación de formularios ejecutándose debajo en la aplicación. La pregunta del OP es muy legítima y un requisito común. – Aaron

2

que acabo de hacer esto con Helicon Ape. La licencia gratuita incluye 3 sitios, que para mí fue lo suficientemente bueno.

Si usa esto en un sitio, simplemente recuerde comprobar si la licencia está activada para el sitio (menú de inicio> helicon> ape> manager, help, license manager).

+0

No se debe requerir un complemento de terceros para una tarea tan simple. – Aaron

+2

No, no debería. No significa que no lo sea, por desgracia. –

0

Como Aaron señala, esto no es tan sencillo en IIS7. Ahora, la otra cara es que este viejo truco es, en el mejor de los casos, inseguro y ahora hay mejores formas de hacerlo y poder usar todos los métodos de autenticación con todas las aplicaciones tiene muchas ventajas. Hay algunas formas de evitar esto, como por ejemplo:

a) mantener el sitio de desarrollo detrás de una VPN a la que puedan acceder sus clientes.
b) proxy inverso del sitio y permitir que el proxy realice la autenticación http.
c) Un poco más involucrado sería construir su aplicación con un modo de demostración. El truco aquí es activarlo o desactivarlo desde la primera solicitud dada una cadena especial de consulta mágica. Verifique esto en Session_Start() y luego etiquete a los usuarios que vienen con él y se benefician.

Cuestiones relacionadas