2010-03-29 24 views
5

estoy usando una página de error personalizado en IIS 6:ASP.NET: deshabilitar la autenticación para una sola página aspx (página de error personalizada)?

<customErrors redirectMode="ResponseRedirect" mode="On" defaultRedirect="Error2.aspx"/> 

quiero para deshabilitar la autenticación para la página personalizada de error porque se elevó el error está relacionado con un módulo de autenticación y no quiero entrar en un bucle infinito y quiero mostrar una página de error limpio para el usuario. He estado intentando la siguiente configuración para hacer eso.

<location path="Error2.aspx"> 
<system.web> 
    <authentication mode="None"/> 
    <authorization> 
    <allow users="?"/> 
    <allow users="*"/> 
    </authorization> 
</system.web> 
</location> 

Me estoy haciendo un System.Configuration.ConfigurationErrorsException de la línea que establece el modo de autenticación.

Es un error utilizar una sección registrada como allowDefinition = 'MachineToApplication' más allá del nivel de la aplicación. Este error puede deberse a que un directorio virtual no está configurado como una aplicación en IIS.

He verificado que no hay otros archivos web.config en subdirectorios en la carpeta de la aplicación. La carpeta de aplicaciones se configura como una aplicación en IIS y la página de error está en la raíz de la aplicación. Los permisos de archivo configurados para la página de error en IIS incluyen autenticación anónima y de Windows (también intenté anonimato).

Respuesta

1

Cambié mi modo de redireccionamiento de error personalizado a rewriteResponse. Al hacer esto, no se emite una solicitud separada para la página de error, el módulo de autenticación que está generando el error no se vuelve a ejecutar, etc.

Me imagino que esto puede no ser suficiente en algunos escenarios (framework MVC quizás ?) pero para mi caso de uso, fue suficiente.

Por el momento, voy a responder mi propia pregunta con esta solución que surgió a menos que alguien más pueda demostrar una forma de deshabilitar realmente la autenticación tal como se estableció originalmente.

0

Abra su configuración de IIS y asegúrese de que la raíz IIS (machine.config) permite escribir en la propiedad ofensiva (ya sea system.web.authentication o system.web.authorization, dependiendo del número de línea al que se hace referencia en el error)

Después de eso, limpie su solución y reconstruya. Tuve este problema y no tenía nada que ver con las configuraciones de machine.config o web.config. Por alguna razón, hacer una limpieza y reconstruir hizo que el error desapareciera.

+0

Lo sentimos, no tuvimos suerte. AllowDefinition en machine.config se establece en MachineToApplication, el valor predeterminado. Esto significa establecer el valor en el web.config en la raíz de la aplicación debería estar bien, que es donde estoy configurando el valor. –

1

Echa un vistazo a los siguientes link. Tiene información que podría ayudar con la etiqueta location.

<location path="404.aspx"> 
    <system.web> 
     <authorization> 
      <allow users="*" /> 
     </authorization> 
    </system.web> 
</location> 

El enfoque más sencillo sería mover todos sus archivos de error y las páginas que desea estar siempre accesible a su propio directorio y luego añadir un archivo web.config al directorio que permite el acceso no autenticado.

+0

No es así de simple. El error se genera en el PostAquireRequestState de un módulo. Esto da como resultado una redirección a Error2.aspx, pero se llama de nuevo al PostAquireRequestState del módulo. Application.Context.SkipAuthorization se establece en false al cargar la página de error (incluso con allow users = *). Como una redirección solicita una página nueva, Application.Server.getLastError() no es nada.El código continúa donde arrojó el error en primer lugar y, por lo tanto, la página de error no se muestra. Comprobar si la solicitud es la página de error podría funcionar, pero sospecho advertencias. –

Cuestiones relacionadas