Wie stelle ich GeoServer-Layer hinter die Authentifizierung?


29

Ich möchte Kartenlayer mit OpenLayers und GeoServer veröffentlichen. Das ist zwar einfach einzurichten, aber ich bin ein bisschen verloren, wenn es um Authentifizierungsmöglichkeiten geht. Ich möchte verschiedene Benutzer erstellen, die durch Anmelden mit ihrem eigenen Benutzernamen und Passwort zu ihrem eigenen Kartenfenster geleitet werden. Wie kann dies sicher geschehen, damit keiner meiner Benutzer auf die Ebenen des anderen zugreifen kann?

Ich habe verstanden, dass es ziemlich einfach ist, das Setup zu "hacken", indem man zum Beispiel Fragen an den GeoServer stellt, wo man ihn einfach auffordert, alle verfügbaren Layer aufzulisten.

Welche Möglichkeiten habe ich? Ich nehme an, dass Apache bei der Einrichtung auf meinem Ubuntu-Server hilfreich sein könnte. Irgendwelche Tutorials zu diesem Thema?

Antworten:


20

Zunächst sollten Sie die Geoserver-Dokumentation zur Sicherheit lesen. http://docs.geoserver.org/stable/en/user/security/index.html Sie werden feststellen, dass es möglich ist, Ebenen für verschiedene Benutzer oder Rollen zugänglich / unzugänglich zu machen.

Eine andere mögliche Lösung wäre, den Geoserver von außen unzugänglich zu machen (schließen Sie Port 8080 auf Ihrem Server für IPs, die nicht localhost sind), und erstellen Sie dann selbst einen Authentifizierungsmechanismus in der Web-Programmiersprache Ihrer Wahl.

Zum Beispiel: Sie könnten eine Art Login / Authentifizierung in PHP einrichten, die nach der Authentifizierung Anfragen an den Geoserver auf localhost weiterleitet.


Zusätzlich: Sie könnten eine Nachschlagetabelle haben, die Verknüpfungen zwischen den Benutzern Ihrer Anwendung und den GeoServer-Benutzern / -Rollen / -Layern enthält und Sicherheit auf Layer-Ebene auf GeoServer anwendet. Wenn der Proxy von OpenLayer eine Ebene anfordert, sucht er nach den entsprechenden Geoserver-Anmeldeinformationen, authentifiziert sie und gibt die Ebene zurück, auf die er Zugriff hat. Auf diese Weise kann der Benutzer versuchen, eine beliebige andere Ebene anzufordern, erhält diese jedoch nur, wenn er Zugriff darauf hat.
CaptDragon

9

Sie könnten einen Blick auf GeoPrisma werfen

Wir mussten eine Web-Mapping-Anwendung mit Sicherheit für sensible Datensätze erstellen. Dies hätte mit mehreren Anwendungen und einem Standardzugriff auf Login und Passwort erreicht werden können, aber das Projekt war zu umfangreich und wäre sehr komplex in der Wartung gewesen. Das Hinzufügen eines neuen Datensatzes zum Beispiel würde Änderungen an jeder Anwendung, Anpassungen der Sicherheit usw. von Hand erfordern.

Aus diesem Grund haben wir uns entschlossen, eine eigene Web-Mapping-Anwendung zu entwickeln, die die Zugriffssteuerung auf Datensätze mithilfe der verfügbaren OpenSource-Web-Mapping-Anwendungen umfasst.

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

Ich hätte einen Scan der Dokumentation - es könnte übertrieben sein, dies zu einem einfachen Projekt hinzuzufügen, wenn Sie nur wenige Ebenen / Benutzer auf Ihrem System haben. Wenn Sie Hunderte von Benutzern / Gruppen mit Bearbeitungsrechten für verschiedene Datensätze haben, ist es wahrscheinlich sinnvoll, ein vorhandenes Projekt wie GeoPrisma zu verwenden.

Andernfalls würde die standardmäßige Webserversicherheit, die auf HTTP basiert, wahrscheinlich ausreichen.


Kann GeoPrisma mit GeoServer verwendet werden? Haben sie eine nachgewiesene Erfolgsbilanz?
Mimo

Es kann mit jedem WMS-Server einschließlich GeoServer verwendet werden. Kommentare oben hinzugefügt.
Geographika

0

Bitte debuggen Sie diese Anweisung

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

Wenn Sie den Wert von FORMAT als Parameter der URL übergeben, erhalten Sie die Karte (Bild) vom Server. Wenn Sie sie erhalten, sollte Ihr Proxy einwandfrei funktionieren.


0

Ein Ansatz wäre, einen Proxy wie diesen zu implementieren , der die Anmeldeinformationen eines Benutzers als angemeldet mithilfe von Sitzungsvariablen überprüft und ihm nur den Zugriff auf Ressourcen ermöglicht, auf die er Zugriff hat Benutzer ist nicht berechtigt, sie anzuzeigen.

In Bezug auf die Daten, die sie möglicherweise sehen, ist dies etwas komplizierter, wenn es sich um eine Teilmenge einer größeren Datenmenge handelt, aber ich sehe zwei Ansätze.

  1. Verwenden Sie parametrisierte SQL-Ansichten, um zu steuern, welche Daten dem Benutzer angezeigt werden. Sie können den Proxy verwenden, um die URL zu ändern, bevor sie mit den für diesen Benutzer spezifischen Parametern an Geoserver übergeben wird. Sie können die Parameter auch über einen Ajax-Aufruf an Openlayers zurücksenden, nachdem der Benutzer authentifiziert wurde, und die Parameter als Teil des WMS-Aufrufs getMAP in OpenLayers bereitstellen. Die tatsächlich angezeigten Daten können durch die Variablensubstitution in SLD verarbeitet werden , um die angezeigten Daten zu filtern, oder durch die Verwendung externer Stile in Ihren WMS-getMap-Aufrufen, um die SLD zu ändern, die ein Benutzer zur Anzeige eines bestimmten Layers verwendet.

  2. Verwenden Sie einen Ajax-Aufruf nach Benutzerauthentifizierung, um Map Extents anzugeben , damit sich der Benutzer nur in einem bestimmten Bereich bewegen kann. Sie können auch mit layerVisibility () einschränken, welche Daten ebenfalls angezeigt werden können.


0
  1. Erstellen Sie zunächst eine Proxy-URL (in Ihrer Programmiersprache).
  2. Diese Proxy-URL wird auf den Geo-Server übertragen.
  3. In dieser Proxy-URL können Sie die Authentifizierung mit Users & Page-Referenzen durchführen. Sie können überprüfen, ob die URL von Ihrer Webanwendung weitergeleitet wird oder nicht. Wenn nicht, senden Sie einfach einen nicht autorisierten Header.
  4. Sie finden diese Proxy-URL anstelle Ihrer Geo-Server-URL.
  5. Niemand wird in der Lage sein zu wissen, wie die genaue URL von Geoserver lautet und er wird nicht in der Lage sein, sie zu hacken.
  6. Fügen Sie aus Sicherheitsgründen für Benutzer einfach eine Überprüfung der Benutzer in der Proxy-URL hinzu.
  7. Übergeben Sie in Open Layers die wms-url als: http://domainname.com//proxyUrl.php?user=userid
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.