Como colocar as camadas do GeoServer atrás da autenticação?

29

Quero publicar camadas de mapa usando o OpenLayers e o GeoServer. Embora isso seja fácil de configurar, estou um pouco perdido no que diz respeito às possibilidades de autenticação. O que eu quero é criar usuários diferentes que, entrando com seu próprio nome de usuário e senha, sejam direcionados para sua própria janela do mapa. Como isso pode ser feito com segurança para que nenhum dos meus usuários possa acessar as camadas um do outro?

Eu entendi que é muito fácil "hackear" a instalação, por exemplo, fazendo consultas ao GeoServer, onde simplesmente se pede para listar todas as camadas disponíveis.

Quais são as minhas opções? Suponho que o apache possa ser útil ao configurá-lo no meu servidor ubuntu? Algum tutorial sobre esse assunto?

Mimo
fonte

Respostas:

20

Primeiro de tudo, acho que você deveria ler a documentação do Geoserver sobre Segurança. http://docs.geoserver.org/stable/en/user/security/index.html, você descobrirá que é possível tornar as camadas acessíveis / inacessíveis a diferentes usuários ou funções.

Outra solução possível seria tornar o servidor geográfico inacessível do mundo exterior (feche a porta 8080 no servidor para IPs que não sejam o host local) e, em seguida, crie um mecanismo de autenticação na linguagem de programação da web de sua escolha.

Por exemplo: Você pode configurar algum tipo de login / autenticação no php que encaminha solicitações ao servidor geo no host local, uma vez autenticado.

milovanderlinden
fonte
Além disso: você pode ter uma tabela de pesquisa que tenha associações entre os Usuários do seu aplicativo e os Usuários / Funções / Camadas do GeoServer e aplicar a segurança no nível da camada no GeoServer. Portanto, quando o proxy do OpenLayer solicita uma camada, procura as credenciais correspondentes do Geoserver, as autentica e retorna a camada à qual ele tem acesso. Dessa forma, o usuário pode tentar solicitar qualquer outra camada que desejar, mas não a obterá, a menos que tenha acesso a ela.
CaptDragon
9

Você pode dar uma olhada no GeoPrisma

Precisávamos criar um aplicativo de mapeamento da Web com segurança em conjuntos de dados sensíveis. Isso poderia ter sido realizado com vários aplicativos e colocando um acesso padrão de login + senha a eles, mas o projeto era muito grande e seria muito complexo de manter. Adicionar um novo conjunto de dados, por exemplo, exigiria modificações de cada aplicativo manualmente, ajustes de segurança etc.

Por isso, decidimos desenvolver nosso próprio aplicativo de mapeamento da Web que incluía controle de acesso em conjuntos de dados usando os aplicativos de mapeamento da Web OpenSource disponíveis.

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

Eu teria uma varredura da documentação - pode ser um exagero incluir isso em um projeto simples se você tiver apenas algumas camadas / usuários em seu sistema. Se você possui centenas de usuários / grupos com direitos de edição em diferentes conjuntos de dados, provavelmente faz sentido usar um projeto existente, como o GeoPrisma.

Caso contrário, a segurança padrão do servidor da Web criada em torno do HTTP provavelmente seria suficiente.

geographika
fonte
O GeoPrisma pode ser usado com o GeoServer? Eles têm um histórico comprovado?
Mimo
Pode ser usado com qualquer servidor WMS, incluindo o GeoServer. Comentários adicionados acima.
geographika
0

Por favor, depure esta declaração

$ type = $ _ GET ['FORMAT'];

Quando você passa o valor de FORMAT como os parâmetros da URL, você obtém o mapa (imagem) do servidor. Se você o obtiver, seu proxy deverá estar funcionando bem.

comi
fonte
0

Uma abordagem seria implementar um Proxy como este que pudesse verificar as credenciais de um usuário como logado usando variáveis ​​de sessão e permitir que eles acessassem apenas os recursos aos quais têm direito, ou seja: verifique o URL para as camadas que estão sendo chamadas e negue acesso se o usuário não está autorizado a visualizá-los.

Em termos de quais dados eles podem ver, se for um subconjunto de um conjunto de dados maior, isso é um pouco mais complicado, mas vejo duas abordagens.

  1. Use Exibições SQL parametrizadas para controlar quais dados o usuário visualizaria. Você pode usar o Proxy para alterar o URL antes que ele seja passado para o Geoserver com os parâmetros específicos para esse usuário. Você também pode enviar os parâmetros de volta aos Openlayers por meio de uma chamada Ajax após o usuário ser autenticado e fornecer os parâmetros como parte da chamada getMSAP do WMS no OpenLayers. Os dados reais exibidos podem ser manipulados pela substituição de Variável no SLD para filtrar os dados exibidos ou pelo uso de Estilos externos nas chamadas getMap do WMS para alterar o SLD que o usuário usa para exibir uma determinada camada.

  2. Use uma chamada Ajax após a autenticação do usuário para especificar as extensões de mapa para permitir apenas que o usuário se mova em torno de uma área especificada. Você também pode usar layerVisibility () para restringir quais dados também podem ser exibidos.

Mark Cupitt
fonte
0
  1. Primeiro, crie um URL de proxy (na sua linguagem de programação).
  2. Este URL do proxy acessará o servidor geográfico.
  3. Nesta URL de proxy, você pode fazer a autenticação com referências a Usuários e páginas. Você pode verificar se o URL está sendo referido no seu WebApp ou Não. Caso contrário, basta enviar um cabeçalho não autorizado.
  4. Você atingirá esse URL do proxy em vez do URL do seu servidor geográfico.
  5. Ninguém será capaz de saber qual é o URL exato do Geoserver e ele não será capaz de invadir.
  6. Para segurança com usuários, basta adicionar uma verificação de usuários no URL do proxy.
  7. Em Camadas abertas, passe o wms-url como: http://domainname.com//proxyUrl.php?user=userid
Vineet Arora
fonte