Я пытаюсь использовать OpenLayers 2.12 для отображения слоев WMS с сервера, на котором включена базовая аутентификация HTTP.
Я попытался обработать аутентификацию, указав имя пользователя и пароль в параметре URL в моем коде JavaScript. Пример создания слоя:
myLayer = new OpenLayers.Layer.WMS('background',
'https://username:password@ws.nls.fi/rasteriaineistot/image?',
{
layers: 'background',
bbox: '-380188,6249943,1347312,8226943'
},
{
displayInLayerSwitcher: true,
isBaseLayer: false,
projection: 'EPSG:3067',
visibility: true
});
Конечно, это небезопасно, поскольку учетные данные хранятся в коде JavaScript и работают не во всех браузерах. Internet Explorer 8 выдает ошибку безопасности, указывающую на OpenLayers.js, и вообще отказывается отображать карту. Firefox 13 выскакивает некоторые диалоги аутентификации, которые я могу отменить (карта отображается правильно после этого). В Chrome 23 аутентификация работает безупречно.
Можете ли вы подтвердить, что невозможно обработать базовую аутентификацию HTTP кросс-браузерным способом, кодируя ее в URL и передавая ее OpenLayers, как в примере?
Можете ли вы предложить альтернативные способы обработки базовой аутентификации HTTP, чтобы она работала прозрачно для пользователя (не отображаются всплывающие окна аутентификации)? Возможно, используйте какой-то прокси-сервер, чтобы обойти это.
источник
Ответы:
В итоге мы решили добавить прокси-сервер аутентификации между клиентом OpenLayers и бэкэнд-сервисом WMS. Таким образом, вместо непосредственного подключения к службе WMS клиент OpenLayers подключается к прокси-серверу, который добавляет необходимые заголовки аутентификации к запросам.
Пример кода для создания слоев:
Пример конфигурации прокси-сервера Apache:
Вы можете иметь несколько конфигураций прокси, используя этот стиль.
То, что вы должны поместить в кавычки Авторизации, это просто кодировка base-64 строки «username: password» (без кавычек). Для получения дополнительной информации см. Эту ссылку: /programming/567814/apache2-reverse-proxy-to-an-end-point-that-requires-basicauth-but-want-to-hide-t
источник
Вы можете отправить поддельный запрос ajax перед добавлением слоя на карту. Браузер будет обрабатывать базовую аутентификацию для вас:
Это будет работать только в том случае, если сервер вернет требуемый заголовок 401 - auth (в геосервере вы должны установить политику безопасности как сложную или смешанную)
источник