Защита WMS от несанкционированного доступа?

21

В проекте клиент хочет, чтобы изображения WMS были защищены от несанкционированного доступа.

Каковы общие решения для реализации этого?

Совместимы ли они с OGC-стандартами?

Mnementh
источник

Ответы:

17

Спецификация OGC только обязывает использовать http. Если он соответствует http, все должно быть в порядке.

Некоторые возможные методы:

  • Базовая аутентификация HTTP (пароль, отправленный в виде простого текста, может иметь ограниченную поддержку клиента)
  • Дайджест-аутентификация HTTP (более безопасная, может иметь ограниченную поддержку клиентов)
  • Фильтровать IP-адрес клиента (легко внедрить, но не особенно безопасно).
  • Секретный URL. Используйте GUID для создания неуловимого URL. Предполагается, что клиенты будут хранить URL в секрете. Гораздо проще для пользователя, чем ввод пароля. Гарантированная поддержка клиентов.
Мэтью Снейп
источник
11

Это сообщение OGC от 2005 года гласит:

Нет особых аспектов безопасности, которые являются частью Спецификаций интерфейса OGC WMS / WFS / WCS. Вместо этого безопасность и аутентификация лучше всего обрабатываются на другом уровне в стеке обработки.

Кирк Куйкендалл
источник
4

Если для ваших целей достаточно защиты через неизвестность, вы можете настроить ложное расширение для уровня:

Просто используйте координаты на другой стороне Земли. Слой по-прежнему будет отображаться в списке слоев, запросы по-прежнему будут возможны, но если пользователь просто выберет его в программном обеспечении ГИС и выберет «увеличить до слоя», он ничего не увидит и может подумать, что этот слой просто пуст или его нет Работа. Приложение, знающее правильное расширение уровня, должно иметь доступ к нему.

Я уже видел, как это решение применяется на некоторых сайтах WMS, но, вероятно, оно не полностью соответствует стандартам OGC, поскольку сервер возвращает неверное расширение.

имя
источник
3

Вы можете требовать, чтобы пользователи подключались к WMS через HTTP, защищенный VPN. Это ставит уровень безопасности на уровень IP-сети, но, безусловно, добавляет сложности.

mwalker
источник
2

Предполагая, что у вас есть следующее:

  • Mapserver отображает данные через базу данных Postgis
  • У вас есть отдельное приложение, которое может аутентифицировать пользователей и обновлять указанную базу данных.
  • Ваш WMS LAYER использует WFS tileindex, как описано в Примере WMS-T с индексом листов PostGIS для растровых изображений

Вы можете создать api_keysтаблицу с access_tokenи expires_atстолбцами. Затем добавьте параметр строки запроса &api_key=my_unique_key. Ваш Mapfile для tileindex ( см. Пример ) будет настроен примерно так:

DATA "geom FROM (
  SELECT
   my_table.geom,
   my_table.gid,
  api_keys.access_token
  FROM my_table
  CROSS JOIN api_keys
  WHERE ST_Intersects(geom, !BOX!) and api_keys.expires_at > now()
) AS subquery USING UNIQUE gid USING SRID=4326"
FILTER "access_token = '%api_key%'
VALIDATION
  'api_key' '^[a-zA-Z0-9\_\-]{33}$'
  'default_api_key' ''
END

Идея заключается в том, что ваше отдельное приложение, которое аутентифицирует пользователей в базе данных, обновит api_keysтаблицу, установив access_tokenхэш md5 и сохраняя expires_atстолбец обновленным до некоторого момента в будущем.

В качестве альтернативы вы можете проксировать трафик к отдельной платформе, которая обрабатывает аутентификацию WMS / OWS и передает прокси авторизованных пользователей на внутренний Mapserver. Вот список, полученный из сообщения в списке рассылки пользователей mapserver , который представляет собой расширенный / обобщенный список ответов других на этот вопрос.

Если вы когда-нибудь решите использовать Geoserver, взгляните на модуль AuthKey .

Пит
источник