authentication - 使用 jQuery AJAX 进行 CAS 身份验证和重定向

标签 authentication redirect jquery

我有一个 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
});

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);
    }
};

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

这是 AJAX 调用不处理重定向的问题,还是这里发生的事情比表面上看到的更多?

最佳答案

事情确实比表面上看到的要多。

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

jQuery AJAX 确实可以正确处理重定向。我在同一子域上使用脚本进行了一些测试来验证这一点。此外,cookie 也会按照您的预期进行传递。请参阅my blog post对于这项研究。

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

关于authentication - 使用 jQuery AJAX 进行 CAS 身份验证和重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2961051/

相关文章:

authentication - 在 keycloak token 中为内部数据库中的用户 ID 使用 "sub"声明是否安全

多线程环境中的 Java WS Authenticator

java - 如何增强 CXF 拦截器方法的回调处理程序

ios google登录,如何获取用户图片网址?

php - 如何使用 .htaccess 将静态 URL 重定向到动态 URL(在 Wordpress 站点上)

javascript - 向下滚动时尝试在元素中重新创建幻灯片

javascript - 设置值后 PHP 变量似乎为空

javascript - 为什么定时 javascript 重定向失败?

Javascript Cookie 和重定向问题

javascript - jQuery 褪色 "back to top"链接。页面加载链接可见性