Аутентификация CAS и перенаправления с Ajax jQuery

У меня есть страница HTML, которая должна выполнить запросы к защищенному от CAS (Сервис Централизованной аутентификации) веб-сервис с помощью функций Ajax jQuery. У меня есть следующий код:

$.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. (См. этот вопрос для подобной проблемы.)

Действительно ли это - проблема с вызовами Ajax, не обрабатывающими перенаправления, или там больше продолжается здесь, чем кажется на первый взгляд?

9
задан Community 23 May 2017 в 02:00
поделиться

1 ответ

Здесь действительно происходит нечто большее, чем кажется на первый взгляд.

После некоторого исследования выяснилось, что запросы jQuery AJAX, сделанные таким образом, не работают, если они сделаны не к тому же самому поддомену. В данном примере запросы выполняются к cas.mydomain.com с другого сервера. Даже если он также находится на mydomain.com, запрос будет неудачным, потому что поддомен не совпадает.

jQuery AJAX действительно правильно обрабатывает перенаправления. Я провел несколько тестов со скриптами на том же поддомене, чтобы убедиться в этом. Кроме того, куки передаются, как и следовало ожидать. См. запись в моем блоге об этом исследовании.

Также следует помнить, что протоколы должны быть одинаковыми. То есть, поскольку cas.mydomain.com использует HTTPS, страница, с которой вы его вызываете, также должна быть на HTTPS, иначе запрос будет неудачным.

5
ответ дан 3 November 2019 в 04:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: