2010-09-29 20 views
32

He pasado un día y medio tratando de resolver este problema. Básicamente, tenemos un sitio web ASP.net con Autenticación de formularios en IIS7 usando Framework 4.0.Autenticación de formularios Ignorando el documento predeterminado

La autorización parece funcionar a la perfección para todos los escenarios, con la excepción de golpearlo sin ningún documento específico (debería resolverse con el documento predeterminado).

Por ejemplo (Por favor, no seas rudo en el sitio aún se desarrolla;)), http://www.rewardroster.com/Default.aspx funciona perfectamente, esta página debe permitir el acceso anon tal como se especifica en el web.config.

pero si golpeo www.rewardroster.com Directamente se redirige a la página de inicio de sesión con URL de devolución establecido en "/" o Login.aspx ReturnUrl =% 2F

Algunas cosas que he intentado:?

1) Establezca Autenticación en Ninguno y luego el documento Predeterminado funcionó, por lo que no es el problema.

2) Agregado defaultDocument atribuyen a Web.config

3) eliminado todas las entradas en la lista de documentos predeterminado en IIS excepción de Default.aspx

4) Asiento secundario MachineKey en Config

5) conmutadas del integrada a la tubería clásico en IIS

Esto es lo que está en mi config:

<authentication mode="Forms"> 
    <forms name="appNameAuth" loginUrl="Login.aspx" protection="All" timeout="60" slidingExpiration="true" defaultUrl="Default.aspx" path="/"> 
    </forms> 
    </authentication> 
    </authentication> 

<location path="Default.aspx"> 

Muchas gracias por su tiempo y espero que alguien sabe lo que está pasando aquí.

+2

que tienen el mismo problema con v4 DONet, ¿alguien sabe por qué esto repente ha comenzado a suceder cuando ha estado bien desde hace años en v2.0, V3 y V3 .5? – bigtv

Respuesta

36

Esta fue mi solución:

En Global.asax, método: Application_BeginRequest, coloque el siguiente:

if (Request.AppRelativeCurrentExecutionFilePath == "~/") 
    HttpContext.Current.RewritePath("HomePage.aspx"); 

bonito y sencillo, y usted tiene la oportunidad de construir la lógica alrededor de qué página de inicio desea usar si su sitio web usa varias páginas de inicio basadas en variables de configuración.

Dmitry.Alk

+1

Esto funcionó como un encanto! Muchas gracias Dmitry! – Andrey

+4

Respuesta correcta. Pero hazlo "~/HomePage.aspx". Causa si su aplicación está en una subcarpeta ("http: // servidor/myapp /") una solicitud a "http: // servidor/myapp" (sin la barra al final) bloqueará este código. – Alex

+0

No funcionó para mí, todavía obtiene * Login.aspx? ReturnUrl =% 2f * al presionar el .com – MGOwen

3

Tuve un problema similar. Sin estilos cuando no estaba conectado, www.site.nl \ redirigido a la página de inicio de sesión (con una URL de redirección a una página de inicio) e ingresando a www.site.nl \ Home (la misma página de inicio que la url de redirección mencionada antes) no necesitaba un inicio de sesión.

solución era:

  • Abrir IIS
  • Abrir IIS: Autenticación
  • Abrir y editar el acceso anónimo
  • Registro de usuario (que cambió el usuario para el usuario app.pool)
  • Otorgue derechos de usuario en la raíz del sitio (en el sistema de archivos)

Eso funcionó para mí.

Buena suerte

3

Lo que terminé haciendo para solucionar este problema es escribir unas pocas líneas de código en mi página de inicio de sesión para comprobar si hay una Request.QueryString [ "ReturnUrl"] de "/". Si lo encontró, se redirigirá a default.aspx.

No pude encontrar CUALQUIER forma de hacer que la autenticación de formularios no intercepte llamadas sin una página especificada (por ejemplo, www.misitio.com). . :(Incluso intenté .NET 4 enrutamiento URL y eso no impidió que la autenticación de formularios desde el secuestro de la solicitud, ya sea

A continuación se muestra el código que utilicé en Login.aspx:

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!(IsPostBack || IsAsync)) 
    { 
     string returnUrl = Request.QueryString["ReturnUrl"]; 
     if (returnUrl != null) 
      if (returnUrl == "/") 
       Response.Redirect("default.aspx"); 
    } 
} 
+1

No es bonito, pero funciona – WIRN

+0

Intenté un montón de otras soluciones. Esto fue lo único que funcionó para mí. –

0

que tenía un parecido problema hoy. Intentaba usar la canalización integrada para proteger los recursos que no son de p.net (archivos estáticos, php, etc.)

Tenía una regla en mi raíz web.config que tenía, entonces, estaba permitiendo el acceso a recursos específicos caso por caso.

Esto funcionó excepto th en las solicitudes a "/" nunca podría autenticarse (redirigir interminablemente a la página de inicio de sesión), mientras que las solicitudes a "/Default.aspx" estaban bien.

Mi problema se debió a que el módulo Asp.Net UrlAuthentication estaba habilitado para todos los tipos de recursos, y aparentemente esto no funciona para mi escenario. En cambio, tuve que cambiar ese módulo para que funcione únicamente con recursos administrados e instalar la autenticación de URL no gestionada de IIS7. Luego tuve que configurar eso (ya que usa diferentes configuraciones de autenticación) y me aseguré de que RoleManager estuviera habilitado para los recursos no administrados (ya que me estaba autenticando en los roles). Esta URL puede ser útil: http://learn.iis.net/page.aspx/142/understanding-iis-70-url-authorization/

1

solución de Johan trabajó para mí, pero sólo si la solicitud era para la raíz del sitio.

Mi sitio está organizado así:...

  • www [mysite] .com/login.aspx
  • www [mysite] .com/default.aspx
  • www [mysite] .com/[somestuff] /default.aspx
  • www. [mysite] .com/[morestuff] /default.aspx

Después de seguir un buen consejo de Johan, pide a www. [mysite] .com tiene dirigido a las formas página de inicio de sesión y después de iniciar sesión, la página predeterminada. Sin embargo, si alguien solicitaba "/ [somestuff] /", aún así no funcionaría.

Lo hice funcionar habilitando la autenticación anónima en los directorios [somestuff] y [morestuff], y luego deshabilitándola en los archivos individuales dentro de estos directorios. Esa no es una configuración de seguridad que deseo admitir, dado que las personas podrían llegar a donde van desde default.aspx o simplemente solicitar [somestuff] /default.aspx para empezar. Pero ahora sé por qué está fallando. Parece que necesita acceso anónimo en directorios en los que desea usar documentos predeterminados.

8

Estaba viendo este mismo problema al intentar llegar a la ruta de acceso raíz y probé todo lo mencionado anteriormente. Parece Asp.net 4.0 añade dos módulos ExtensionlessUrl a ApplicationHost.config para IIS 7. Puede eliminar estos módulos añadiendo lo siguiente a su web.config

<system.webServer> 
    <handlers> 
    <remove name="ExtensionlessUrl-Integrated-4.0"/> 
    <remove name=" ExtensionlessUrl-ISAPI-4.0_32bit "/> 
    </handlers> 
</system.webServer> 

Información adicional

Microsoft KB

How extensionless urls are handled by asp net v4

+0

Pero si necesito usar URLS sin extensión (por ejemplo, servicios WCF), esto los desactivará, ¿verdad? – MGOwen

+5

esto no funcionó para mí –

+1

Extrañamente, al principio tampoco funcionó para mí, pero luego cuando lo hice a través del Administrador de IIS (desde la sección de 'asignaciones de controladores'), funcionó, aunque esto parecía simplemente modificar la web .config de la misma manera. También debe eliminar el de 64 bits si está ejecutando un sistema de 64 bits. –

0

me encuentro con el mismo problema y resuelve de esta manera:

en Globa l.asax junto solución Dmitry.Alk añadí:

if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~/default.aspx") 
     HttpContext.Current.RewritePath("Default.aspx"); 
    if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~/") 
     HttpContext.Current.RewritePath("Default.aspx"); 
    if (Request.AppRelativeCurrentExecutionFilePath.ToLower() == "~") 
     HttpContext.Current.RewritePath("Default.aspx"); 
Cuestiones relacionadas