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

前端之家收集整理的这篇文章主要介绍了CAS身份验证和使用jQuery AJAX重定向前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个HTML页面需要使用jQuery AJAX函数向受CAS保护的( Central Authentication Service)Web服务发出请求.我有以下代码
$.ajax({
    type: "GET",url: request,dataType: "json",complete: function(xmlHttp) {
        console.log(xmlHttp);
        alert(xmlHttp.status);
    },success: handleRedirects
});

请求变量可以是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);
    }
};

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

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

解决方法

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

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

jQuery AJAX确实正确处理重定向.我在同一个子域上使用脚本进行了一些测试来验证.此外,cookie也会按照您的预期传递.本研究见my blog post.

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

猜你在找的jQuery相关文章