Вот моя проблема: я разрабатываю систему, которая может быть опрошена для извлечения динамических данных. Он находится в 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, однако ...
Большое спасибо!
У вас был хороший вопрос, но это ужасный ответ. Вы просто отключите аутентификацию, если запрос сделан с помощью 'getJSON'? –
Да знает ли кто-нибудь, возможно ли вообще сделать вызов AJAX в API другого домена, используя базовую аутентификацию? Раньше я использовал libcurl для этого, но хром-расширения не позволяют запускать php! –