por net name formularios formsauthentication autenticacion aspx asp authentication iis-7 basic-authentication

authentication - net - Autenticación básica de IIS7 para proteger un sitio que usa autenticación de formularios



formsauthentication web config (3)

¡Esto debería ser mucho más simple de lo que ha demostrado ser!

Tengo una aplicación web ASP.Net que utiliza la autenticación de FORMAS para proteger parte del sitio (es decir, el área de inicio de sesión del miembro).

Ahora simplemente quiero colocar una ventana emergente de contraseña del navegador tradicional / simple (seguridad de directorio) en todo el sitio porque lo estamos probando y no queremos que nadie tropiece en el sitio y vea la versión no finalizada, etc.

Esto solía ser super simple en versiones anteriores de IIS.

He "instalado la autenticación básica" (como IIS7 no sale de la caja con esto ahora). Pero cuando lo habilito, me dice que no puedo tenerlo habilitado al mismo tiempo que cualquier autenticación basada en redireccionamiento (que es lo que utiliza mi autenticación de FORMAS).

Así que eso es una estupidez.

Tiene que haber una forma súper simple de simplemente colocar una contraseña emergente barata en todo el sitio sin afectar el otro método de autenticación que haya configurado dentro de web.config para la aplicación real.

Muchas gracias..

ACTUALIZACIONES Las restricciones de acceso a IP no son buenas por un par de razones: - Mi IP es dinámica y, por lo tanto, cambia constantemente. - No quiero molestar a nadie que necesite ver el sitio al pedirles que abran una consola en su máquina y que trabajen en su dirección IP o que verifiquen su enrutador, etc. Muchos de ellos no son usuarios comerciales técnicos y lo harán. Tómelos una hora para averiguar su dirección IP. - Tanto la autenticación básica como la autenticación de Windows no permiten que la autenticación de formularios subyacente permanezca en su lugar debajo.

Lo que parece que tenemos aquí es un caso masivo de Microsoft que intenta sobregrabar las cosas y, como resultado, ya no es posible ni es más fácil cumplir con los requisitos antiguos muy simples. Esto tiene que ser posible de alguna manera ... ALGUIEN ???


Hay una solución simple para usted, ya que desea utilizar la autenticación FORMS ...

  1. Agregue esta sección a su web.config bajo el encabezado principal. No lo fusione, simplemente cópielo y péguelo como un bloque. La etiqueta de ubicación aislará estas reglas del resto de web.config y permitirá su fácil eliminación más adelante.

    <location allowOverride="false"> <system.web> <authentication mode="Forms"> <forms loginUrl="frontdoor.aspx" name=".ASPXFORMSAUTH"> </forms> </authentication> <authorization> <deny users="?" /> </authorization> </system.web> </location>

  2. Crea una página llamada "frontdoor.aspx". Obtenga el contenido de esa página aspx desde este enlace: http://msdn.microsoft.com/en-us/library/xdt4thhy.aspx (desplácese hacia abajo hasta donde dice: "Para crear la página de inicio de sesión")

  3. ¡TODO LISTO! Esto bloqueará todo su sitio y le permitirá especificar el nombre de usuario y la contraseña (yo llamo a este proceso "bloquear la puerta frontal") para la puerta principal independientemente del resto del sitio. Las credenciales de la puerta de entrada se especifican en el archivo de la puerta de entrada (no es muy seguro pero es lo suficientemente bueno para lo que (nosotros) necesitamos) en este condicional:

    [Línea 6:]

    If ((UserEmail.Text = "TheSharedFrontDoorLogonName") And (UserPass.Text = "AndItsPassword")) Then

Modifique el condicional para satisfacer sus necesidades y luego envíe por correo electrónico a sus clientes / empresas los tipos de credenciales a la puerta principal.


Lo que describe es una limitación de la ASP.NET predeterminada, solo está diseñado para ejecutar un módulo de autenticación a la vez. La solución es crear su propio IHttpModule que IHttpModule su autenticación personalizada y, si tiene éxito, pase la solicitud a ASP.NET que continúe usando los formularios.

La siguiente es una implementación básica de dicho módulo. Devolverá un 401 Unauthorized y solicitará al usuario que inicie sesión en el reino WOPR . Entonces aceptará la contraseña Joshua , ignorando el nombre de usuario especificado.

Compile esto como un conjunto separado y agréguelo a su web.config, en las system.web/httpModules y system.webServer/modules . No se requiere ninguna otra modificación de su aplicación web.

using System; using System.Text; using System.Web; namespace Research { public class AuthenticationModule : IHttpModule { public void Init(HttpApplication app) { app.BeginRequest += (sender, e) => { if (!Authenticate(app.Context)) { app.Context.Response.Status = "401 Unauthorized"; app.Context.Response.StatusCode = 401; app.Context.Response.AddHeader("WWW-Authenticate", "Basic realm=WOPR"); app.Response.ClearContent(); app.Context.Response.End(); } }; } public void Dispose() { } public static Boolean Authenticate(HttpContext context) { var authHeader = context.Request.Headers.Get("Authorization"); if (String.IsNullOrEmpty(authHeader)) return false; if (!authHeader.StartsWith("Basic ")) return false; var base64Credentials = authHeader.Substring(6); var binaryCredentials = Convert.FromBase64String(base64Credentials); var asciiCredentials = Encoding.ASCII.GetString(binaryCredentials); if (!asciiCredentials.Contains(":")) return false; var credentials = asciiCredentials.Split(new[] { '':'' }, 2); return credentials[1] == "Joshua"; } } }


Me estoy topando con el mismo problema. Pondré un sitio beta limitado a un grupo de vista previa. El sitio web utiliza la autenticación de formularios, pero algunas personas del grupo de vista previa tendrán cuentas en el sitio web y otras no. Independientemente, todos deberán autenticarse en la raíz para obtener acceso a la vista previa.

Hasta ahora, lo único que he trabajado exactamente como lo quiero es Helicon Ape . Estoy corriendo la prueba y hasta ahora todo bien.

Archivo .htaccess estándar en root.

AuthUserFile c:/fakepath/.htpasswd AuthType Basic AuthName "SITE SECURITY" Require valid-user

Usuario .htpasswd para agregar un nombre de usuario y contraseña: username:encryptedpassword .