Отправка учетных данных с междоменными сообщениями?


по данным запросы с учетными данными, Firefox будет отправлять учетные данные только вместе с междоменными сообщениями, если

invocation.withCredentials = "true";

установлен... но не похоже, что Ajax API jQuery предоставляет какой-либо механизм для этого.

есть ли что-то, что я пропустил? Есть ли другой способ сделать это?

3 68

3 ответа:

функциональность должна быть нарушена в jQuery 1.5.

начиная с jQuery 1.5.1 вы должны использовать xhrfields param.

$.ajaxSetup({
    type: "POST",
    data: {},
    dataType: 'json',
    xhrFields: {
       withCredentials: true
    },
    crossDomain: true
});

Docs:http://api.jquery.com/jQuery.ajax/

сообщение об ошибке:http://bugs.jquery.com/ticket/8146

можно использовать beforeSend обратный вызов для установки дополнительных параметров (XMLHTTPRequest объект передается ему как его единственный параметр).

просто чтобы вы знали, этот тип междоменного запроса не будет работать в обычном сценарии сайта и не с любым другим браузером. Я даже не знаю, какие ограничения безопасности накладывает FF 3.5, просто чтобы вы не бились головой о стену ни за что:

$.ajax({
    url: 'http://bar.other',
    data: { whatever:'cool' },
    type: 'GET',
    beforeSend: function(xhr){
       xhr.withCredentials = true;
    }
});

еще одна вещь, чтобы остерегаться, это то, что jQuery настройка для нормализации различий браузера. Вы можете обнаружить, что библиотека jQuery накладывает дополнительные ограничения, которые запрещают этот тип функциональности.

в jQuery 3 и, возможно, более ранних версиях, следующая более простая конфигурация также работает для отдельных запросов:

$.ajax(
        'https://foo.bar.com,
        {
            dataType: 'json',
            xhrFields: {
                withCredentials: true
            },
            success: successFunc
        }
    );

полная ошибка, которую я получал в Firefox Dev Tools - > Network tab (на вкладке Security для отдельного запроса), была:

ошибка во время подключения к Foo.баре.ком.Узла SSL был невозможно согласовать приемлемый набор параметров безопасности.Ошибка код: SSL_ERROR_HANDSHAKE_FAILURE_ALERT