2010-08-03 4 views
2

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

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

Это работает: я могу опросить мои действия из любого браузера, и данные будут возвращены. У меня есть сценарий JavaScript в приложении Grails, который вызывает этот 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 by OPTIONS), и мое приложение Grails не справляется с этим ,

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

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

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

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

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

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

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

ответ

1

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

+2

У вас был хороший вопрос, но это ужасный ответ. Вы просто отключите аутентификацию, если запрос сделан с помощью 'getJSON'? –

+0

Да знает ли кто-нибудь, возможно ли вообще сделать вызов AJAX в API другого домена, используя базовую аутентификацию? Раньше я использовал libcurl для этого, но хром-расширения не позволяют запускать php! –

Смежные вопросы