Как разместить слои GeoServer за аутентификацией?

29

Я хочу публиковать слои карты, используя OpenLayers и GeoServer. Хотя это достаточно легко настроить, я немного растерялся, когда дело доходит до возможностей аутентификации. Я хочу создать разных пользователей, которые, войдя под своим собственным именем пользователя и паролем, будут перенаправлены в собственное окно карты. Как это можно сделать безопасно, чтобы никто из моих пользователей не смог получить доступ к слоям друг друга?

Я понял, что довольно легко «взломать» настройку, например, сделав запросы к GeoServer, где кто-то просто просит его перечислить все доступные слои.

Какие у меня варианты? Я полагаю, Apache может помочь при настройке на моем сервере Ubuntu? Какие-нибудь учебники на эту тему?

Mimo
источник

Ответы:

20

Прежде всего, я думаю, что вы должны прочитать документацию Geoserver по безопасности. http://docs.geoserver.org/stable/en/user/security/index.html вы обнаружите, что можно сделать слои доступными / недоступными для разных пользователей или ролей.

Другое возможное решение - сделать геосервер недоступным из внешнего мира (закройте порт 8080 на своем сервере для IP-адреса, отличного от localhost), а затем создайте механизм аутентификации самостоятельно на языке веб-программирования по вашему выбору.

Например: вы можете настроить своего рода логин / аутентификацию в php, которая будет перенаправлять запросы на геосервер на localhost после аутентификации.

milovanderlinden
источник
Кроме того: у вас может быть справочная таблица, которая имеет связи между пользователями вашего приложения и пользователями / ролями / слоями GeoServer и может применять безопасность на уровне слоев в GeoServer. Поэтому, когда прокси-сервер OpenLayer запрашивает слой, он ищет соответствующие учетные данные Geoserver, аутентифицирует их и возвращает уровень, к которому у него есть доступ. Таким образом, пользователь может попытаться запросить любой другой уровень, который он хочет, но не получит его, если у него нет доступа к нему.
CaptDragon
9

Вы могли бы взглянуть на GeoPrisma

Нам нужно было создать веб-картографическое приложение с безопасностью для разумных наборов данных. Этого можно было бы достичь с помощью нескольких приложений и путем добавления к ним стандартного логина и пароля, но проект был слишком большим, и его было бы очень сложно поддерживать. Например, добавление нового набора данных потребует изменений каждого приложения вручную, настроек безопасности и т. Д.

Вот почему мы решили разработать наше собственное веб-картографическое приложение, которое включало бы контроль доступа к наборам данных с использованием доступных веб-картографических приложений OpenSource.

http://geoprisma.org/dist/build/html/introduction/index.html

Я бы просканировал документацию - было бы излишне добавлять это в простой проект, если в вашей системе всего несколько слоев / пользователей. Если у вас есть сотни пользователей / групп с правами на редактирование разных наборов данных, то, вероятно, имеет смысл использовать существующий проект, такой как GeoPrisma.

В противном случае стандартная безопасность веб-сервера, построенная на HTTP, вероятно, будет достаточной

geographika
источник
Можно ли использовать GeoPrisma с GeoServer? У них есть проверенный послужной список?
Мимо
Он может быть использован с любым сервером WMS, включая GeoServer. Комментарии добавлены выше.
география
0

Пожалуйста, отладьте это утверждение

$ Тип = $ _ GET [ 'FORMAT'];

Когда вы передаете значение FORMAT в качестве параметров URL-адреса, получаете ли вы карту (изображение) с сервера. Если вы получаете его, то ваш прокси-сервер должен работать нормально.

ели
источник
0

Один из подходов к реализации прокси - сервера , как это , что может проверить пользователей учетные данные как войти в систему с помощью переменных сеанса и только позволяют им доступ к ресурсам они имеют право, а именно: проверить URL для слоев , которые в настоящее время называются и если запретить доступ Пользователь не авторизован для их просмотра.

С точки зрения того, какие данные они могут видеть, если это подмножество большего набора данных, это немного сложнее, но я вижу два подхода ...

  1. Используйте параметризованные представления SQL, чтобы контролировать, какие данные увидит пользователь. Вы можете использовать Прокси-сервер для изменения URL-адреса перед его передачей в Geoserver с параметрами, специфичными для этого пользователя. Вы также можете отправить параметры обратно в Openlayers через Ajax Call после аутентификации пользователя и предоставить параметры как часть вызова WMS getMAP в OpenLayers. Отображаемые фактические данные могут обрабатываться путем подстановки переменных в SLD для фильтрации отображаемых данных или с помощью внешних стилей в вызовах getMap в WMS для изменения SLD, которое пользователь использует для отображения данного слоя.

  2. Используйте Ajax Call после аутентификации пользователя, чтобы указать экстенты карты, чтобы позволить пользователю перемещаться только вокруг указанной области. Вы также можете использовать layerVisibility (), чтобы ограничить отображаемые данные.

Марк Купитт
источник
0
  1. Сначала создайте URL прокси (на вашем языке программирования).
  2. Этот URL-адрес прокси попадет на гео-сервер.
  3. В этом прокси-адресе вы можете выполнить аутентификацию с помощью ссылок «Пользователи и страницы». Вы можете проверить, что URL ссылается из вашего веб-приложения или нет. Если нет, просто отправьте неавторизованный заголовок.
  4. Вы попадете на этот прокси-URL, а не на URL-адрес своего гео-сервера.
  5. Никто не сможет узнать, что такое точный адрес геосервера, и он не сможет его взломать.
  6. Для обеспечения безопасности с пользователями просто добавьте проверку пользователей в прокси-URL.
  7. Из открытых слоев передайте wms-url как: http://domainname.com//proxyUrl.php?user=userid
Винеет Арора
источник