Tengo un sitio web que intenta llamar a una acción de controlador MVC en otro sitio web. Estos sitios se configuran como fideicomisos de terceros dependientes en AD FS 2.0. Todo se autentica y funciona bien al abrir páginas en la ventana del navegador entre los dos sitios. Sin embargo, al intentar invocar una acción de controlador desde JavaScript utilizando el método jQuery AJAX, siempre falla. Aquí es un fragmento de código de lo que estoy tratando de hacer ...AD FS 2.0 Autenticación y AJAX
$.ajax({
url: "relyingPartySite/Controller/Action",
data: { foobar },
dataType: "json",
type: "POST",
async: false,
cache: false,
success: function (data) {
// do something here
},
error: function (data, status) {
alert(status);
}
});
La cuestión es que AD FS utiliza JavaScript para poder hacer un formulario HTML oculto a la parte que confía. Al rastrear con Fiddler, puedo ver que llegue al sitio de AD FS y devolver este formulario html que debe publicar y redirigir a la acción del controlador autenticada. El problema es que este formulario está volviendo como resultado de la solicitud de AJAX y obviamente va a fallar con un error de analizador ya que la solicitud de AJAX espera que JSON provenga de la acción del controlador. Parece que esto sería un escenario común, entonces, ¿cuál es la forma correcta de comunicarse con AD FS de AJAX y manejar esta redirección?
si HTML es devuelto por la llamada ajax, claramente no desea analizarlo con el analizador json. cambie dataType a "html" y publique un ejemplo del html devuelto, para que pueda mostrarle cómo escribir un controlador que envíe el formulario devuelto. – ironchefpython
El problema es que quiero recuperar JSON. AD FS redirecciona con un nuevo formulario HTML que desea publicar para realizar el intercambio de información que necesita. Esto funciona bien dentro de una ventana del navegador pero no aquí. Una vez que se da el apretón de manos, no hay redirección con la solicitud AJAX y recupero JSON. He encontrado una solución por ahora para manejar la publicación de la página html en un IFRAME, pero no es ideal. –
Entiendo que quieres recuperar JSON, pero no vas a recuperar JSON. _Sin embargo_, si desea poder tratar la estructura de datos devuelta como si fuera _ JSON, publique un ejemplo del HTML devuelto, y le mostraré cómo escribir un controlador que enviará el formulario devuelto ** sin ** usando un IFRAME. – ironchefpython