Comment mettre les couches GeoServer derrière l'authentification?

29

Je souhaite publier des couches de carte à l'aide d'OpenLayers et de GeoServer. Bien que cela soit assez facile à configurer, je suis un peu perdu en ce qui concerne les possibilités d'authentification. Ce que je veux, c'est créer différents utilisateurs qui, en se connectant avec leur propre nom d'utilisateur et mot de passe, seront dirigés vers leur propre fenêtre de carte. Comment cela peut-il être fait en toute sécurité afin qu'aucun de mes utilisateurs ne puisse accéder les uns aux autres?

J'ai compris qu'il est assez facile de "pirater" la configuration en faisant, par exemple, des requêtes au GeoServer où l'on lui demande simplement de lister toutes les couches disponibles.

Quelles sont mes options? Je suppose qu'apache pourrait être utile lors de sa configuration sur mon serveur Ubuntu? Des tutoriels sur ce sujet?

Mimo
la source

Réponses:

20

Tout d'abord, je pense que vous devriez lire la documentation Geoserver sur la sécurité. http://docs.geoserver.org/stable/en/user/security/index.html vous découvrirez qu'il est possible de rendre les couches accessibles / inaccessibles à différents utilisateurs ou rôles.

Une autre solution possible serait de rendre le géoserveur inaccessible du monde extérieur (fermez le port 8080 sur votre serveur pour les IP autres que localhost) puis créez vous-même un mécanisme d'authentification dans le langage de programmation Web de votre choix.

Par exemple: vous pouvez configurer une sorte de connexion / authentification en php qui transmet les requêtes au géoserveur sur localhost une fois authentifié.

milovanderlinden
la source
De plus: Vous pouvez avoir une table de recherche qui a des associations entre les utilisateurs de votre application et les utilisateurs / rôles / couches GeoServer et appliquer la sécurité au niveau des couches sur GeoServer. Ainsi, lorsque le proxy d'OpenLayer demande une couche, il recherche les informations d'identification Geoserver correspondantes, les authentifie et renvoie la couche à laquelle il a accès. De cette façon, l'utilisateur peut essayer de demander toute autre couche qu'il souhaite mais ne l'obtiendra que s'il y a accès.
CaptDragon
9

Vous pourriez jeter un œil à GeoPrisma

Nous devions créer une application de cartographie Web sécurisée sur des ensembles de données sensibles. Cela aurait pu être accompli avec plusieurs applications et en y mettant un identifiant + un mot de passe standard, mais le projet était trop grand et il aurait été très complexe à maintenir. L'ajout d'un nouvel ensemble de données, par exemple, nécessiterait des modifications de chaque application manuellement, des ajustements de la sécurité, etc.

C'est pourquoi nous avons décidé de développer notre propre application de cartographie Web qui comprenait le contrôle d'accès sur les ensembles de données à l'aide des applications de cartographie Web OpenSource disponibles.

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

J'aurais une analyse de la documentation - il peut être exagéré d'ajouter cela à un projet simple si vous n'avez que quelques couches / utilisateurs sur votre système. Si vous avez des centaines d'utilisateurs / groupes avec des droits d'édition sur différents jeux de données, il est probablement judicieux d'utiliser un projet existant tel que GeoPrisma.

Sinon, la sécurité standard du serveur Web construite autour de HTTP suffirait probablement.

geographika
la source
GeoPrisma peut-il être utilisé avec GeoServer? Ont-ils une expérience éprouvée?
Mimo
Il peut être utilisé avec n'importe quel serveur WMS, y compris GeoServer. Commentaires ajoutés ci-dessus.
geographika
0

Veuillez déboguer cette déclaration

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

lorsque vous passez la valeur de FORMAT comme paramètres de l'URL, obtenez-vous la carte (image) du serveur, si vous l'obtenez, votre proxy devrait fonctionner correctement.

a mangé
la source
0

Une approche consisterait à implémenter un proxy comme celui-ci qui pourrait vérifier les informations d'identification d'un utilisateur connecté en utilisant des variables de session et leur permettre uniquement d'accéder aux ressources auxquelles ils ont droit, c'est-à-dire: vérifier l'URL pour les couches appelées et refuser l'accès si l'utilisateur n'est pas autorisé à les consulter.

En ce qui concerne les données qu'ils peuvent voir, s'il s'agit d'un sous-ensemble d'un ensemble de données plus important, c'est un peu plus compliqué, mais je vois deux approches ..

  1. Utilisez des vues SQL paramétrées pour contrôler les données que l'utilisateur verrait. Vous pouvez utiliser le proxy pour modifier l'URL avant qu'elle ne soit transmise à Geoserver avec les paramètres spécifiques à cet utilisateur. Vous pouvez également renvoyer les paramètres à Openlayers via un appel Ajax après que l'utilisateur est authentifié et fournir les paramètres dans le cadre de l'appel getMAP WMS dans OpenLayers. Les données réelles affichées peuvent être gérées par substitution de variable dans SLD pour filtrer les données affichées ou en utilisant des styles externes dans vos appels getMap WMS pour modifier le SLD qu'un utilisateur utilise pour afficher une couche donnée.

  2. Utilisez un appel Ajax après l'authentification de l'utilisateur pour spécifier les extensions de carte afin de permettre uniquement à l'utilisateur de se déplacer dans une zone spécifiée. Vous pouvez également utiliser layerVisibility () pour restreindre les données pouvant également être affichées.

Mark Cupitt
la source
0
  1. Créez d'abord une URL proxy (dans votre langage de programmation).
  2. Cette URL proxy atteindra le géo-serveur.
  3. Dans cette URL proxy, vous pouvez effectuer l'authentification avec les utilisateurs et les pages référencées. Vous pouvez vérifier que l'URL est référencée depuis votre application Web ou non. Sinon, envoyez simplement un en-tête non autorisé.
  4. Vous frapperez cette URL proxy au lieu de votre URL de géo-serveur.
  5. Personne ne pourra savoir quelle est l'url exacte de Geoserver et il ne pourra pas le pirater.
  6. Pour la sécurité avec les utilisateurs, ajoutez simplement une vérification des utilisateurs dans l'URL proxy.
  7. Depuis Open Layers, passez le wms-url en tant que: http://domainname.com//proxyUrl.php?user=userid
Vineet Arora
la source