Estoy tratando de usar OpenLayers 2.12 para mostrar capas WMS de un servidor que tiene habilitada la autenticación básica HTTP.
Intenté manejar la autenticación poniendo el nombre de usuario y la contraseña en el parámetro URL en mi código JavaScript. Ejemplo de creación de capa:
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
});
Por supuesto, esto no es seguro ya que las credenciales se almacenan en código JavaScript y no funcionan en todos los navegadores. Internet Explorer 8 genera un error de seguridad que apunta a OpenLayers.js y se niega a mostrar el mapa. Firefox 13 muestra algunos cuadros de diálogo de autenticación que puedo cancelar (el mapa se muestra correctamente después de eso). En Chrome 23, la autenticación parece funcionar sin problemas.
¿Puede confirmar que no es posible manejar la autenticación básica HTTP de manera cruzada codificándola en la URL y dándola a OpenLayers como en el ejemplo?
¿Puede sugerir formas alternativas de manejar la autenticación básica HTTP para que funcione de manera transparente para el usuario (no se muestran ventanas emergentes de autenticación)? Quizás use algún tipo de servidor proxy para solucionar esto.
fuente
Respuestas:
La solución con la que terminamos fue agregar un servidor proxy de autenticación entre el cliente OpenLayers y el servicio back-end WMS. Entonces, en lugar de conectarse directamente al servicio WMS, el cliente OpenLayers se conecta a un servidor proxy que agrega los encabezados de autenticación necesarios a las solicitudes.
Código de ejemplo para crear las capas:
Ejemplo de configuración del proxy Apache:
Puede tener múltiples configuraciones de proxy usando este estilo.
Lo que debe poner dentro de las comillas de Autorización es solo la codificación en base 64 de la cadena "nombre de usuario: contraseña" (sin las comillas). Para obtener más información, consulte este enlace: /programming/567814/apache2-reverse-proxy-to-an-end-point-that-requires-basicauth-but-want-to-hide-t
fuente
Puede enviar una solicitud falsa de ajax antes de agregar la capa al mapa. El navegador se encargará de la autenticación básica por usted:
Esto funcionará solo si el servidor devuelve un encabezado 401 - auth requerido (en geoserver debe configurar la política de seguridad para desafiar o mezclar)
fuente