Protegendo o WMS contra acesso não autorizado?

21

Em um projeto, o cliente deseja que as imagens do WMS sejam protegidas contra acesso não autorizado.

Quais são as soluções comuns para perceber isso?

Eles são compatíveis com os padrões OGC?

Mnementh
fonte

Respostas:

17

A especificação do OGC exige apenas o uso de http. Se for http compatível, tudo bem.

Alguns métodos possíveis:

  • Autenticação básica HTTP (a senha enviada como texto sem formatação pode ter suporte limitado ao cliente)
  • Autenticação HTTP Digest (mais segura, pode ter suporte limitado ao cliente)
  • Filtre o endereço IP do cliente (fácil de implementar, mas não particularmente seguro).
  • URL secreto. Use um GUID para gerar um URL impossível de adivinhar. Supõe que os clientes manterão o URL secreto. Muito mais simples para o usuário usar do que a entrada de senha. Suporte ao cliente garantido.
Matthew Snape
fonte
11

Este post do OGC de 2005 diz:

Não há aspectos de segurança específicos que fazem parte das especificações da interface OGC WMS / WFS / WCS. Em vez disso, a segurança e a autenticação são melhor tratadas em outra camada na pilha de processamento.

Kirk Kuykendall
fonte
4

Se a segurança através da obscuridade for suficiente para seus propósitos, você poderá configurar uma extensão falsa para a camada:

Basta usar coordenadas do outro lado da Terra. A camada ainda aparecerá na lista de camadas, as solicitações ainda serão possíveis, mas se um usuário simplesmente selecioná-la em um software GIS e escolher "aplicar zoom à camada", ele não verá nada e pode pensar que essa camada está simplesmente vazia ou não trabalhos. Um aplicativo que sabe a extensão correta da camada ainda deve poder acessá-lo.

Eu já vi essa solução aplicada em alguns sites WMS, mas provavelmente não está totalmente em conformidade com os padrões OGC, pois o servidor retorna uma extensão incorreta.

Nome
fonte
3

Você pode exigir que os usuários se conectem ao WMS sobre HTTP protegido por uma VPN. Ele coloca a camada de segurança no nível da rede IP, mas certamente adiciona complexidade.

mwalker
fonte
2

Supondo que você tenha o seguinte:

  • O Mapserver está renderizando dados através de um banco de dados Postgis
  • Você tem um aplicativo separado que pode autenticar usuários e atualizar o referido banco de dados.
  • O WMS LAYER usa um índice de mosaico WFS, conforme documentado no Exemplo de WMS-T com o Índice de mosaicos PostGIS para imagens raster

Você pode criar uma api_keystabela com access_tokene expires_atcolunas. Em seguida, adicione um parâmetro querystring &api_key=my_unique_key. Seu Mapfile para o tileindex ( veja o exemplo ) seria configurado assim:

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

A idéia é que seu aplicativo separado, que autentica os usuários no banco de dados, atualize a api_keystabela, definindo access_tokenum hash md5 e mantenha a expires_atcoluna atualizada em algum momento no futuro.

Como alternativa, você pode proxy de tráfego para uma estrutura separada que lida com autenticação WMS / OWS e proxies de usuários autorizados para o Mapserver interno. Aqui está uma lista obtida de uma postagem para a lista de discussão mapserver-users , que é uma lista expandida / resumida do que os outros responderam a esta pergunta.

Se você decidir usar o Geoserver, dê uma olhada no módulo AuthKey .

Pete
fonte