Браузер не выполняет перенаправление из ответа AJAX (ответ, сгенерированный PHP, использует аутентификацию CAS)

Хорошо, похоже, я ошибся с первоначальным вопросом. Итак, вот некоторые исправления. Ответ по-прежнему актуален, потому что второе перенаправление останавливается при изменении протокола на HTTPS (SSL).

В моем случае перенаправление происходит несколько раз, и браузер не выполняет второе перенаправление. Выполняется первая переадресация, но возвращается ошибка.

Я продолжаю читать, что ответы JavaScript AJAX, содержащие перенаправления, выполняются автоматически, но, похоже, не в моем случае. За первым перенаправлением автоматически следует браузер, а первое перенаправление возвращается без выполнения второго перенаправления в заголовке. Моя проблема в том, что я хочу, чтобы все перенаправления выполнялись автоматически браузером.

Перенаправления являются частью библиотеки phpCAS. У меня есть API, написанный на PHP, который каждый раз проверяет аутентификацию пользователя перед возвратом результатов.

Вот последовательность. Главное отметить, что браузер возвращает второй ответ после 1 перенаправления. Я бы предпочел, чтобы он шел до конца и возвращал последний ответ, когда я выполняю AJAX-вызов localhost/example/api.

localhost / example

  • Вызывает localhost/example/api с использованием jQuery.ajax ()

Ответ 1: localhost / example / api

  • Перенаправляет на https://localhost/accounts/cas/login?service=api.example.com&gateway=true (с использованием SSL).

Ответ 2: (SSL) localhost / accounts / cas / login? service = api.example.com & gateway = true

  • Когда присутствует ключ запроса «шлюз», вход в систему просто перенаправляет обратно на URL-адрес, предоставленный ключом «службы» с билетом или без него (чтобы сигнализировать службе о том, что пользователь либо вошел в систему, либо нет).

Ответ 3: localhost / api? ticket = TICKET

  • Проверяет билет и перенаправляет обратно на себя без билета.

Ответ 4: localhost / api

  • На этот раз клиент CAS смотрит на $ _SESSION, чтобы запомнить, какой был билет, а затем обрабатывает запрос API, возвращающий JSONP.

Нет особой причины, по которой я использую CAS поверх OpenID или OpenAuth (orization). CAS был только первым модулем аутентификации, который мне удалось запустить в WordPress. Я открыт для предложений относительно использования другой библиотеки аутентификации, CMS, фреймворка и т. Д. Хотя я надеюсь просто завершить этот проект. Так что чем меньше переоборудования, тем лучше.


person Biagio Arobba    schedule 06.04.2012    source источник
comment
Что вы знаете, я разместил этот вопрос после того, как некоторое время искал в StackOverflow. Затем, после публикации вопроса, я выполняю еще один поиск и нахожу аналогичный вопрос в StackOverflow. stackoverflow.com/questions/2961051 /   -  person Biagio Arobba    schedule 06.04.2012
comment
Похоже, что из-за того, что второй ответ использует другой протокол (SSL) и субдомен другой, то это будет причиной ошибки. Я предполагаю, что это будет означать, что браузер следует перенаправлениям, но не тогда, когда что-то меняется (протокол? Или subodmain? Или оба?), И данные не возвращаются в ответ (в противном случае, возможно, в этот момент можно было бы добавить ответ JSONP. ... Мне придется попробовать ... вздох.)   -  person Biagio Arobba    schedule 06.04.2012


Ответы (1)


Как вы позже заметили, добавляя в своих комментариях, запросы ajax подчиняются той же политике происхождения.

Да, вы можете использовать JSONP - однако, если вам посчастливилось поддерживать только IE8 и выше, CORS может быть лучшим решением.

В основном, добавляя заголовки, такие как

access-control-allow-origin: http://api.example.com
access-control-allow-credentials: true

к вашему ответу сервера вы можете обойти политику перекрестного происхождения.

Также см. Этот билет jQuery, чтобы он вроде как работал с jQuery.

person Razor    schedule 06.04.2012
comment
Круто, я мог бы это сделать, поскольку у меня есть доступ ко всем поддоменам. Будет ли это работать для всех браузеров? - person Biagio Arobba; 06.04.2012