Estou tentando usar o OpenLayers 2.12 para exibir camadas WMS de um servidor com a autenticação básica HTTP habilitada.
Tentei manipular a autenticação colocando o nome de usuário e a senha no parâmetro URL no meu código JavaScript. Exemplo de criação de camada:
myLayer = new OpenLayers.Layer.WMS('background',
'https://username:[email protected]/rasteriaineistot/image?',
{
layers: 'background',
bbox: '-380188,6249943,1347312,8226943'
},
{
displayInLayerSwitcher: true,
isBaseLayer: false,
projection: 'EPSG:3067',
visibility: true
});
É claro que isso não é seguro, pois as credenciais são armazenadas no código JavaScript e não funcionam em todos os navegadores. O Internet Explorer 8 apresenta um erro de segurança apontando para o OpenLayers.js e se recusa a exibir o mapa. O Firefox 13 exibe algumas caixas de diálogo de autenticação que eu posso cancelar (o mapa é exibido corretamente depois disso). No Chrome 23, a autenticação parece funcionar perfeitamente.
Você pode confirmar que não é possível manipular a autenticação básica HTTP de maneira cruzada do navegador, codificando-a na URL e fornecendo-a aos OpenLayers, como no exemplo?
Você pode sugerir maneiras alternativas de lidar com a autenticação básica HTTP para que funcione de forma transparente para o usuário (nenhum pop-up de autenticação é exibido)? Talvez use algum tipo de servidor proxy para solucionar isso.
fonte
Respostas:
A solução que encontramos foi adicionar um servidor proxy de autenticação entre o cliente OpenLayers e o serviço WMS de back-end. Portanto, em vez de se conectar diretamente ao serviço WMS, o cliente OpenLayers se conecta a um servidor proxy que adiciona os cabeçalhos de autenticação necessários às solicitações.
Exemplo de código para criar as camadas:
Exemplo de configuração do proxy Apache:
Você pode ter várias configurações de proxy usando este estilo.
O que você deve colocar dentro das aspas de autorização é apenas a codificação base-64 da string "nome de usuário: senha" (sem as aspas). Para obter mais informações, consulte este link: /programming/567814/apache2-reverse-proxy-to-an-end-point-point-requires-basicauth-but-want-to-hide-t
fonte
Você pode enviar uma solicitação ajax falsa antes de adicionar a camada ao mapa. O navegador manipulará a autenticação básica para você:
Isso funcionará apenas se o servidor retornar um cabeçalho obrigatório de 401 - autenticação (no servidor geográfico, você deve definir a política de segurança para desafiar ou misturar)
fonte