0

我正在使用 cas 5.x。

我有cas-server两个网络应用程序client-1client-2.

目前,我可以单点登录和单点注销,但以下步骤存在一个问题:

  1. access ,它会要求我登录 cas 服务器,然后在登录成功后将client-1我重定向回。client-1

  2. 单击一个按钮可以访问页面中client-2via的受保护资源,但是这个ajax调用返回。ajaxclient-1401

如果我client-2直接从浏览器地址栏中访问受保护的资源step 2,它可以工作。

ajax 无法处理重定向导致这个问题,那么如何解决这个问题?

我的ajax调用是:

//test() is in client-1
function test() {
            
    jQuery.ajax({
        url:"http://192.168.0.14:8445/client-2/user/userInfo",
        headers: {'X-Requested-With': 'XMLHttpRequest'},        
        success: function(res) {                    
            //...
        }        
    });
        
}
4

1 回答 1

0

根据 pac4j 文档,

当您使用间接客户端时,如果用户尝试访问受保护的 URL,请求将被重定向到身份提供者进行登录。但是,如果传入的 HTTP 请求是 AJAX 请求,则不会执行重定向并返回 401 错误页面。

所以你看到的是预期的行为。

X-Requested-With接下来,如果标头的值为XMLHttpRequestis_ajax_request参数或标头为,则认为 HTTP 请求是 AJAX 请求true。这是处理/检测 AJAX 请求时的默认行为/条件,默认情况下,pac4j 只会在addRedirectionUrlAsHeader 返回 401 http 时计算重定向 URL 并将其添加为标头(假设间接客户端设置为 true)地位。

ajax 无法处理重定向导致此问题

它不是为处理重定向而设计的。您需要在 AJAX 调用中捕获 401,从传递给您的标头中获取重定向 url 并自动执行重定向,或者执行任何其他对您的应用程序行为正确的活动/操作(显示消息、重定向到另一个 URL 等)。

于 2020-09-23T11:10:00.667 回答