CAS身份验证和使用jQuery AJAX重定向

Ste*_*Nay 9 authentication jquery redirect

我有一个HTML页面,需要使用jQuery AJAX函数向受CAS保护的(中央身份验证服务)Web服务发出请求.我有以下代码:

$.ajax({
    type: "GET",
    url: request,
    dataType: "json",
    complete: function(xmlHttp) {
        console.log(xmlHttp);
        alert(xmlHttp.status);
    },
    success: handleRedirects
});
Run Code Online (Sandbox Code Playgroud)

request变量可以是CAS服务器(https://cas.mydomain.com/login?service=myServiceURL)或直接到服务(然后应该重定向回CAS以获取服务票据).Firebug显示正在进行请求,并以302重定向的形式返回.但是,该$.ajax()功能不处理重定向.

我写了这个函数来解决这个问题:

var handleRedirects = function(data, textStatus) {
    console.log(data, textStatus);
    if (data.redirect) {
       console.log("Calling a redirect: " + data.redirect);
       $.get(data.redirect, handleRedirects);
    } else {
        //function that handles the actual data processing
        gotResponse(data);
    }
};
Run Code Online (Sandbox Code Playgroud)

但是,即使这样,handleRedirects函数永远不会被调用,并且xmlHttp.status总是返回0.它看起来也不像是通过cas.mydomain.com调用发送的.(有关类似问题,请参阅问题.)

这是AJAX调用没有处理重定向的问题,还是这里有更多的问题而不是眼睛?

Ste*_*Nay 5

确实有更多的事情发生,而不是眼睛.

经过一些调查后,看来以这种方式生成的jQuery AJAX请求如果不是同一个子域则会失败.在此示例中,正在cas.mydomain.com从其他服务器发出请求.即使它也打开mydomain.com,请求也会失败,因为子域不匹配.

jQuery AJAX确实正确处理重定向.我在同一个子域上使用脚本进行了一些测试来验证.此外,cookie也会按预期传递.请参阅我的博客文章了解此研究.

还要记住,协议必须相同.也就是说,由于cas.mydomain.com使用HTTPS,您调用它的页面也必须使用HTTPS,否则请求将失败.