Safari, Ajax y autenticación Windows. No se envían lo datos del POST.

Esta semana he estado liado con un problema que me ha estado volviendo loco. La aplicación con la que trabajo hace uso intensivo de jQuery y Ajax, y funciona bastante bien (modesto que soy :-)) en todos los navegadores modernos. ¿Todos? No! Una aldea poblada por … en Safari no.

En Safari, tanto en su versión de windows como iPAD la página provocaba un error en el servidor. Tras depurar la aplicación encontré que el problema era que no se están enviado los datos del POST, por lo que inicialmente pensé en un problema del lado del cliente, algún error de javascript y jQuery, así que lo primero que hice fue probar la aplicación y analizar el tráfico con Fiddler.

Mi sorpresa llego cuando la aplicación funciono sin problema … apague Fiddler y volvió a fallar. El caso es que tras volverme medio loco encontré este hilo de stackoverflow y me dio la solución:http://stackoverflow.com/questions/7613196/ajax-post-request-only-works-once-in-safari-5, en el se puede ver la respuesta correcta.

The reason the call is failing is because of a bug in Safari when working with Windows Authentication under IIS. Go to the Authentication settings of your website. Right click on Windows Authentication, choose providers and remove Negotiate, leaving NTLM which works fine. I haven't tested Kerberos.

This issue only appears in certain builds of safari.

Como vemos se trata de un bug de Safari. En el se describe perfectamente mi problema:

  • Envío de datos POST con Ajax
  • Aplicación con autenticación Windows sobre IIS.
  • Safari

Lo gracioso del tema es que se indica que solo ocurre con algunos de los builds del producto … Y para lo que os esteis preguntando porque funciono cuando trabaje con Fiddler decir que Fiddler se pone como proxy, siendo finalmente Fiddler (y no Safari) el que envía las peticiones al IIS.

Para solucionarlo debemos abrir la consola de administración de IIS, seleccionar nuestro site web e ir a la opción de autenticación.

image

Abrimos el elemento y nos muestra las distintas opciones de autenticación disponibles, seleccionamos Autenticación de Windows.

image

De ahí seleccionamos proveedores y eliminamos Negotiate, dejando únicamente NTLM como proveedor.

image

Y eliminamos Negotiate de la lista de proveedores. Mas información sobre el proveedor: http://technet.microsoft.com/es-es/library/dd560645(v=ws.10).aspx

Espero que esta entrada os resulte de ayuda.

Saludos y hasta la próxima.

Pedro  Herrarte  Sánchez
Safari, Ajax y autenticación Windows. No se envían lo datos del POST.
Pedro Herrarte Sánchez

Pedro Herrarte, es consultor independiente, ofreciendo servicios de consultoría, análisis, desarrollo y formación. Posee mas de diez años de experiencia trabajando para las principales empresas de España. Es especialista en tecnologías .NET, entornos Web (ASP.NET, ASP.NET MVC,jQuery, HTML5), bases de datos (SQL Server y ORACLE) e integración de sistemas. Es experto en desarrollo (C#, VB.Net, T-SQL, PL/SQL, , ASP, CGI , C, Pro*C, Java, Essbase, Vignette, PowerBuilder y Visual Basic ...) y bases de datos (SQL Server y ORACLE). Pedro es MCP y MAP 2012, es fundador, diseñador y programador de www.devjoker.com..
Fecha de alta:25/10/2013
Última actualizacion:25/10/2013
Visitas totales:5758
Valorar el contenido:
Últimas consultas realizadas en los foros
Últimas preguntas sin contestar en los foros de devjoker.com