Междоменная базовая аутентификация с использованием jQuery - PullRequest
2 голосов
/ 03 августа 2010

Вот моя проблема: я разрабатываю систему, которую можно опрашивать для получения динамических данных. Это в Grails, и когда я делаю запрос на определенное действие контроллера, скажем "http://localhost:8080/foo/bar",, возвращается список JSON, содержащий самые последние данные.

Для дополнительной безопасности и функциональности я защитил свою страницу с помощью Spring Security (плагин Grails Acegi) с включенной базовой аутентификацией. Когда вы входите в систему, система автоматически загружает информацию о вашем профиле пользователя, и это изменяет возвращаемые данные. Итак, аутентификация обязательна.

Это работает: я могу опрашивать свои действия из любого браузера, и данные будут возвращены. В моем приложении Grails есть скрипт JavaScript, который вызывает этот URL.

Проблема в том, что я хотел бы экспортировать свой JavaScript-скрипт, чтобы распространять его среди клиентов, чтобы они могли создавать свои собственные HTML-файлы, подключать мой JavaScript-файл и иметь доступ к моим данным (вроде API). используя AJAX. Вот так:

$.ajax(url: urlWithParams, 
       method: 'GET', 
       beforeLoad: function(xhr) { 
           xhr.setRequestHeader('Authorization', authString);
       },
       success: myFunction
});

Однако это не работает. Прежде всего, я знаю, что междоменные запросы GET сложны. Но в моем случае я использую Basic Authentication, что сложнее, потому что мне нужно поместить учетные данные непосредственно в XmlHttpRequest, и это создает предварительно просвечиваемые запросы в Firefox (заменяя GET на OPTIONS), и мое приложение Grails не справляется с этим .

Моя проблема очень специфическая. Я использую базовую аутентификацию для предотвращения злонамеренного доступа, однако не могу получить доступ к своему приложению с использованием надлежащих учетных данных из-за некоторых междоменных ограничений!

Что мне делать! Я пытался использовать IFrame, но не могу получить содержимое страницы (появляется ошибка «Отказано в доступе - опять же междоменные ограничения).

Кроме того, поля имени пользователя и пароля jQuery в функции ajax () не работают.

Могу ли я выполнить простой запрос AJAX GET на незащищенной странице, отправив учетные данные в качестве параметров, а затем страница будет перенаправлена ​​на защищенную страницу с использованием учетных данных? Браузер не будет обрабатывать запрос, но могу ли я выполнить перенаправление с учетными данными базовой аутентификации?

У меня такое чувство, что оно не будет работать (что-то связанное с перенаправлением, которое генерирует новый запрос и т. Д.). Я прав или это должно работать?

Может ли JSONP решить эту проблему? Однако я не знаю, как интегрировать базовую аутентификацию с использованием JSONP ...

Большое спасибо!

1 Ответ

1 голос
/ 05 августа 2010

Я решил свой вопрос, используя JSONP. Я изменил свое приложение так, чтобы не требовать базовой аутентификации для вызова AJAX. Метод $ .getJSON () из jQuery добился цели.

...