J'essaie d'utiliser OpenLayers 2.12 pour afficher les couches WMS à partir d'un serveur sur lequel l'authentification HTTP de base est activée.
J'ai essayé de gérer l'authentification en mettant le nom d'utilisateur et le mot de passe dans le paramètre URL dans mon code JavaScript. Exemple de création de couche:
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
});
Bien sûr, cela n'est pas sécurisé car les informations d'identification sont stockées dans du code JavaScript et ne fonctionnent pas dans tous les navigateurs. Internet Explorer 8 donne une erreur de sécurité pointant vers OpenLayers.js et refuse d'afficher la carte du tout. Firefox 13 affiche des boîtes de dialogue d'authentification que je peux annuler (la carte s'affiche correctement après cela). Dans Chrome 23, l'authentification semble fonctionner parfaitement.
Pouvez-vous confirmer qu'il n'est pas possible de gérer l'authentification de base HTTP de manière croisée en la codant dans l'URL et en la donnant à OpenLayers comme dans l'exemple?
Pouvez-vous suggérer d'autres façons de gérer l'authentification de base HTTP afin qu'elle fonctionne de manière transparente pour l'utilisateur (aucune fenêtre contextuelle d'authentification ne s'affiche)? Utilisez peut-être une sorte de serveur proxy pour contourner ce problème.
la source
Réponses:
La solution que nous avons trouvée consistait à ajouter un serveur proxy d'authentification entre le client OpenLayers et le service WMS backend. Ainsi, au lieu de se connecter directement au service WMS, le client OpenLayers se connecte à un serveur proxy qui ajoute les en-têtes d'authentification requis aux demandes.
Exemple de code pour créer les couches:
Exemple de configuration de proxy Apache:
Vous pouvez avoir plusieurs configurations de proxy en utilisant ce style.
Ce que vous devez mettre à l'intérieur des guillemets d'autorisation est juste l'encodage en base 64 de la chaîne "nom d'utilisateur: mot de passe" (sans les guillemets). Pour plus d'informations, consultez ce lien: /programming/567814/apache2-reverse-proxy-to-an-end-point-that-requires-basicauth-but-want-to-hide-t
la source
Vous pouvez envoyer une fausse demande ajax avant d'ajouter la couche à la carte. Le navigateur gérera l'authentification de base pour vous:
Cela ne fonctionnera que si le serveur renvoie un en-tête requis par 401 - auth (dans le géoserveur, vous devez définir la politique de sécurité pour la mettre à l'épreuve ou la mélanger)
la source