401 - No autorizado en Server 2008 R2 IIS 7.5

20

Tengo una aplicación web implementada en Server 2008 IIS 7.5 box.

A distancia se da este error: 401 - Unauthorized: Access is denied due to invalid credentials. (remoto = escritorios en la misma LAN)

He probado varios clientes remotos utilizando diferentes navegadores, todos con el mismo resultado. (IE, FF y Chrome)

Golpear la aplicación desde el escritorio del servidor funciona perfectamente . Sin embargo, no he probado Firebug en el escritorio del servidor. Asumiría que todavía está emitiendo un código de estado 401 pero que aún devuelve el contenido. Ver Actualización # 2.

La aplicación está utilizando autenticación anónima.

La aplicación está escrita en .NET 4.0 Asp.Net usando el marco MVC.

El contenido estático funciona bien, ejemplo: http://server.com/content/image.jpg

Sysinternals procmondevuelve estos 2 resultados para cada solicitud: FAST IO DISALLOWED y PATH NOT FOUND.

Tengo otras 2 aplicaciones MVC funcionando bien en el mismo servidor. He comprobado la seguridad de las carpetas y todas coinciden.

La aplicación funciona bien en un cuadro Server 2008 IIS 7.0.

No aparece nada en el registro de eventos en el servidor relacionado con esto.

Tirando de mi cabello aquí, ¿algún consejo para solucionar problemas?

ACTUALIZACIÓN # 1 : Esto solo obtiene más WTF mientras cavo.

Si hago clic en la aplicación en el Administrador de IIS -> Seleccionar páginas de error -> Editar configuración de Detailed Errorsfunciones, la aplicación funciona de forma remota. No dejar esto encendido, por lo que el problema aún no está resuelto, es más confuso.

ACTUALIZACIÓN # 2 : Usando Firebug, veo que el Estado todavía está 401 Unauthorized, pero la Respuesta está devolviendo el HTML correcto de la aplicación.

ACTUALIZACIÓN # 3 Jugando con un seguimiento de solicitud fallido, aquí está el seguimiento de solicitud de ADVERTENCIA que está causando el 401:

ModuleName ManagedPipelineHandler
Notification 128
HttpStatus 401 
HttpReason Unauthorized 
HttpSubStatus 0 
ErrorCode 0 
ConfigExceptionInfo  
Notification EXECUTE_REQUEST_HANDLER 
ErrorCode The operation completed successfully. (0x0)

La actualización n. ° 4 del registro IIS normal muestra esto:

#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2010-07-20 19:17:22
#Fields: date time s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status time-taken
2010-07-20 19:17:22 10.10.1.10 GET /Purchasing/Home - 80 - 10.10.1.12 Mozilla/5.0+(Windows;+U;+Windows+NT+6.1;+en-US;+rv:1.9.2.6)+Gecko/20100625+Firefox/3.6.6 401 0 0 4414
mxmissile
fuente
¿Intentó ejecutar el seguimiento de solicitud fallida en el servidor y acceder a la aplicación desde la máquina remota? Si hay una falla, debería ver la causa.
Vivek Kumbhar
@vivek ver mi última actualización
mxmissile
ARRG !!! Lo tengo pero por esto otra vez! 2 horas perdidas buscando Html.RenderAction, luego me di cuenta de que Razor usaba, Html.Actionasí que mis búsquedas iniciales quedaron vacías.
mxmissile
Oh, han pasado un par de años, ¿adivina qué? ¡Acabo de perder 3 horas esta mañana de NUEVO! ¿Cuándo aprenderé?!?!?!
mxmissile

Respuestas:

19

A veces tienes que dar un paso atrás ... La causa de esto fue que, Html.RenderAction()en mi opinión, llamaba a un método de acción marcado con el [Authorize]atributo.

mxmissile
fuente
1
Este era mi problema, era lo suficientemente frustrante como para golpear a un panda (no es que lo haría). Gracias mxmissile.
Khalid Abuhakmeh
4

Como funciona localmente pero no remotamente, me parece que la cuenta de usuario anónimo no tiene acceso a algo, pero su usuario de Windows sí. Para probar esto, apague la autenticación de Windows para el sitio web y vea si se rompe localmente.

Lo que se está rompiendo probablemente se ejecute como la identidad de su sitio web en lugar de la identidad de su grupo de aplicaciones, de lo contrario, se rompería local y remotamente. Mi recomendación si tiene asignaciones 1 a 1 de sitios a grupos de aplicaciones, o si tiene un entorno altamente confiable, es configurar la cuenta de usuario anónimo para usar la identidad del grupo de aplicaciones. Entonces no necesita preocuparse por un segundo usuario para mantener.

Usted mencionó el explorador de procesos. Eso es bueno para encontrar información en ejecución, pero la herramienta que probablemente descubrirá errores de acceso denegado es processmon (también de sysinternals). Pruébalo, repro y captura, luego busca la palabra 'negado'. Debería activar los problemas de acceso denegado en el disco.

Scott Forsyth - MVP
fuente
4

Tendrá este mismo comportamiento cuando tenga un filtro para autorizaciones personalizadas que herede AuthorizeAttributey una o más llamadas al OnAuthorizationmétodo, con una de ellas configurada AuthorizationContext.Resultcomo 'HttpUnauthorizedResult'

Elfdragore
fuente
4

Por alguna razón, esto solucionó mi problema.

  1. Haga clic en el sitio en IIS.
  2. Autenticación de doble clic
  3. Haga clic derecho y seleccione Configuración avanzada
  4. Anule la selección de "Habilitar la autenticación en modo kernel"
CTom
fuente
2

¿Verificó la configuración en Reglas de autorización? Si alguien puede acceder a esta página (que parece ser su objetivo), asegúrese de tener una regla de "Permitir" que tenga "Todos los usuarios" debajo de la columna de usuarios.

Luego, en "Autenticación", asegúrese de que no haya conflictos y que solo la Autenticación anónima esté habilitada.

Espero que ayude.

Campo
fuente
1
Permitir - Todos los usuarios - Heredado
mxmissile