2010-04-14 10 views
6

Gente, Tengo una aplicación ASP.NET MVC que estoy intentando proteger usando el Lanzamiento Versión candidata de ADFS v2.0 (Ginebra). He configurado la aplicación como una confianza de parte dependiente, y he usado Fedutil.exe para modificar el Web.config de la aplicación para que tenga la información sobre el servidor de Ginebra y use el servidor de Ginebra como su fuente de reclamos.ADFS v2.0 Error: MSIS7042: la misma sesión del navegador del cliente ha hecho '6' solicitudes en los últimos '1' segundos

Sin embargo, cuando intento presionar la aplicación MVC, se redirecciona a Ginebra, que luego (después de advertirme sobre los certificados autofirmados) me redirige a la aplicación MVC nuevamente. Después de aceptar ambas advertencias de certificados autofirmados, los dos servidores juegan ping-pong entre sí en un bucle de redirección infinito hasta que finalmente Geneva lanza el siguiente mensaje:

La misma sesión de navegador del cliente ha hecho '6' solicitudes en el último '1' segundos. Podría haber una posible mala configuración. Contacte a su administrador para más detalles.

No hay errores en los registros de eventos en el lado MVC o en Ginebra excepto por un evento que contenga el mensaje anterior. Si alguien pudiera darme alguna información sobre cómo tratar de depurar, diagnosticar y, con suerte, solucionar este problema, estaría eternamente agradecido.

Nuevamente, el recuadro Geneva es el candidato para la versión de ADFS v2.0 y el sitio ASP.NET MVC se ha creado utilizando la versión más reciente del SDK de identidad de Windows (finales del '09) con Web.config modificado utilizando FedUtil.exe del WIF SDK.


Así que todos se divertirán con esto ... Probé esta misma aplicación de Firefox y ... FUNCIONA. Me piden mis credenciales de dominio, el servidor ADFS v2 me redirige ONCE y luego termino en la página de inicio de mi aplicación, completa con mi nombre de cuenta y saludo personalizado. Así que ahora el verdadero problema es este: ¿Por qué demonios IE8 queda atrapado en un bucle infinito de redirección y Firefox NO ES? Después de más pruebas, he podido obtener este escenario funcionando, sin modificaciones, sin modificaciones de ninguno de los recursos de ADFS v2 (RC) o de WIF (RTW) en TANTO Safari como Firefox. IE8 es el ÚNICO navegador que muestra algún problema relacionado con este escenario de autenticación. Lo intenté todo, incluso instalando y confiando en los certificados autofirmados, agregando los sitios a mi zona de intranet local y bajando la seguridad a baja e incluso estableciendo las cookies de primero y de terceros para que siempre permitan.

Respuesta

7

Resulta que el nombre de host de la parte dependiente tenía un guión bajo (khoffman_2). Aparentemente, el guión bajo es un carácter DNS ilegal y SÓLO IE rechazará la información con el guión bajo.

Cambié el nombre de mi máquina de khoffman_2 a khoffman2 y la combinación de terceros ADFS v2/MVC funciona perfectamente en Firefox, Safari e IE.

13

tuve el mismo problema con AD FS 1.0 Y para resolverlo, que se aseguró de que la URL había una barra inclinada "/" que siempre iba a funcionar en Firefox, así como IE

por ejemplo: https://somedomain.com/Application_2/

+0

Sí - Me he dado cuenta de que la inclusión de la barra inclinada "/" corrige una serie de problemas de ADFS. – nzpcmad

1

Si bien este no es su problema, hemos tenido problemas idénticos a los que describió.Nuestra solución fue:

  1. habilitado la autenticación básica en IIS (esto no solucionó nada, pero era necesario para los próximos 2 pasos)
  2. Desactivar la autenticación de Windows en IIS (esto resuelve el problema para algunos navegadores IE pero no todos)
  3. Deshabilitar el acceso anónimo en IIS (esto resuelve el problema para el resto de los navegadores IE) respuesta
0

de Jaxidian está cerca.

En mi caso yo sólo tenía que:

  • autenticación de Windows -> minusválidos

  • Anónimo autenticación -> Activado

  • la suplantación de ASP.NET -> minusválidos

  • Formas de autenticación -> Desactivado

  • de Windows autenticación -> minusválidos

+1

Siento que esta podría ser una respuesta relevante, pero necesita un poco de formato y explicación. Podrías elaborar un poco? – Qix

0

Este bucle puede ocurrir cuando un usuario no está autorizado a acceder a una página.

Teníamos un atributo de autorización personalizado en nuestro controlador MVC que verifica si el usuario tenía un rol basado en los reclamos proporcionados si la configuración de UseADFS era verdadera en los archivos de configuración. Pensé que esta configuración se estableció en true y me confundí que seguía obteniendo el bucle adfs al acceder a la página porque estaba en los grupos autorizados para acceder a la página.

La clave para la resolución de problemas fue crear una página web que mostrara mis notificaciones de adfs sin que necesariamente requiriera autenticación.

@if (User.Identity.IsAuthenticated) 
{ 
    <div>UserName: @User.Identity.Name;</div> 

    var claimsIdentity = User.Identity as System.Security.Claims.ClaimsIdentity; 
    <table> 
     @foreach (var claim in claimsIdentity.Claims) 
     { 
     <tr><td>@claim.Type</td><td>@claim.Value</td></tr> 
     } 
    </table> 


} 

me di cuenta de que me estaba inscrito en AD FS, y mis reclamos fueron conseguir crear, por lo ADFS estaba funcionando. El problema real era que mi archivo de configuración tenía UserADFS = "true" en lugar de UseADFS = "true", lo que básicamente hizo que mi código de autorización personalizado devolviera la autorización falsa. Por lo tanto, la página me siguió reenviando a adfs para autenticarse nuevamente.

De todos modos, si un usuario no tiene los derechos correctos para acceder a la página, entonces este bucle de inicio de sesión de adfs también puede ocurrir.

Además, si escribió un atributo de autorización personalizado, asegúrese de consultar el siguiente enlace que describe cómo evitar el ciclo.

Redirect loop with .Net MVC Authorize attribute with ADFS Claims

HandleUnauthorizedRequest personalizado código de controlador para AuthorizeAttribute de ese enlace:

protected override void HandleUnauthorizedRequest System.Web.Mvc.AuthorizationContext filterContext) 
    { 
     if (filterContext.HttpContext.Request.IsAuthenticated) 
     { 
      //One Strategy: 
      //filterContext.Result = new System.Web.Mvc.HttpStatusCodeResult((int)System.Net.HttpStatusCode.Forbidden); 

      //Another Strategy: 
      filterContext.Result = new RedirectToRouteResult(
       new RouteValueDictionary(
        new 
        { 
         controller = "u", 
         action = "LoginStatus", 
         errorMessage = "Error occurred during authorization or you do not have sufficient priviliges to view this page." 
        }) 
       ); 
     } 
     else 
     { 
      base.HandleUnauthorizedRequest(filterContext); 
     } 
    } 
Cuestiones relacionadas