Jak postawić warstwy GeoServer za uwierzytelnianie?

29

Chcę publikować warstwy map za pomocą OpenLayers i GeoServer. Chociaż jest to dość łatwe do skonfigurowania, jestem trochę zagubiony, jeśli chodzi o możliwości uwierzytelniania. Chcę stworzyć różnych użytkowników, którzy logując się przy użyciu własnej nazwy użytkownika i hasła, będą kierowani do własnego okna mapy. Jak można to zrobić bezpiecznie, aby żaden z moich użytkowników nie miał dostępu do swoich warstw?

Zrozumiałem, że dość łatwo jest „zhakować” konfigurację, na przykład wykonując zapytania do GeoServera, gdzie po prostu prosi się o listę wszystkich dostępnych warstw.

Jakie są moje opcje? Przypuszczam, że apache może być pomocny podczas konfigurowania go na moim serwerze Ubuntu? Jakieś samouczki na ten temat?

Mimo
źródło

Odpowiedzi:

20

Po pierwsze, uważam, że powinieneś przeczytać dokumentację Geoserver dotyczącą bezpieczeństwa. http://docs.geoserver.org/stable/en/user/security/index.html odkryjesz, że możliwe jest udostępnienie / niedostępność warstw dla różnych użytkowników lub ról.

Innym możliwym rozwiązaniem byłoby uniemożliwienie dostępu do geoservera ze świata zewnętrznego (zamknięcie portu 8080 na serwerze dla adresów IP innych niż localhost), a następnie samodzielne utworzenie mechanizmu uwierzytelniania w wybranym języku programowania.

Na przykład: Możesz skonfigurować pewnego rodzaju logowanie / uwierzytelnianie w php, które po uwierzytelnieniu przekazuje żądania do geoservera na localhost.

milovanderlinden
źródło
Ponadto: możesz mieć tabelę wyszukiwania, która ma powiązania między użytkownikami aplikacji a użytkownikami / rolami / warstwami GeoServer i stosować zabezpieczenia na poziomie warstwy w GeoServer. Kiedy więc serwer proxy OpenLayer żąda warstwy, wyszukuje odpowiednie poświadczenia Geoserver, uwierzytelnia je i zwraca warstwę, do której ma dostęp. W ten sposób użytkownik może spróbować zażądać dowolnej innej warstwy, której chce, ale nie uzyska jej, chyba że będzie miał do niej dostęp.
CaptDragon,
9

Możesz rzucić okiem na GeoPrisma

Musieliśmy stworzyć aplikację do mapowania sieci z bezpieczeństwem sensownych zestawów danych. Można to osiągnąć za pomocą wielu aplikacji i poprzez wprowadzenie do nich standardowego dostępu do logowania + hasła, ale projekt był zbyt duży i jego utrzymanie byłoby bardzo skomplikowane. Dodanie na przykład nowego zestawu danych wymagałoby ręcznej modyfikacji każdej aplikacji, dostosowania zabezpieczeń itp.

Dlatego postanowiliśmy opracować własną aplikację do mapowania sieci, która obejmowałaby kontrolę dostępu do zbiorów danych przy użyciu dostępnych aplikacji do mapowania sieci OpenSource.

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

Zrobiłbym skan dokumentacji - dodawanie tego do prostego projektu może być przesadą, jeśli masz w systemie tylko kilka warstw / użytkowników. Jeśli masz setki użytkowników / grup z uprawnieniami do edycji różnych zestawów danych, prawdopodobnie warto zastosować istniejący projekt, taki jak GeoPrisma.

W przeciwnym razie prawdopodobnie wystarczające byłyby standardowe zabezpieczenia serwera WWW zbudowane wokół HTTP.

geografia
źródło
Czy GeoPrisma może być używany z GeoServer? Czy mają udokumentowane osiągnięcia?
Mimo
Może być używany z dowolnym serwerem WMS, w tym GeoServer. Komentarze dodane powyżej.
geographika
0

Debuguj to oświadczenie

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

kiedy przekazujesz wartość FORMAT jako parametry adresu URL, czy otrzymujesz mapę (obraz) z serwera, jeśli ją otrzymujesz, to serwer proxy powinien działać poprawnie.

zjadłem
źródło
0

Jedno podejście byłoby wdrożenie Proxy jak to , które mogłyby zweryfikować użytkowników poświadczenia jak zalogować się za pomocą zmiennych sesji i tylko pozwalają im dostępu do zasobów są uprawnieni, czyli: sprawdź URL dla warstw, które są nazywane i odmówić dostępu, jeśli użytkownik nie ma uprawnień do ich przeglądania.

Jeśli chodzi o to, jakie dane mogą zobaczyć, jeśli jest to podzbiór większego zestawu danych, jest to nieco bardziej skomplikowane, ale widzę dwa podejścia ...

  1. Użyj sparametryzowanych widoków SQL, aby kontrolować, jakie dane zobaczy użytkownik. Możesz użyć proxy do zmiany adresu URL przed przekazaniem go do Geoserver z parametrami specyficznymi dla tego użytkownika. Możesz również odesłać parametry z powrotem do Openlayers za pośrednictwem wywołania Ajax po uwierzytelnieniu użytkownika i podać parametry w ramach wywołania WMS getMAP w OpenLayers. Rzeczywiste wyświetlane dane mogą być obsługiwane przez zastępowanie zmiennych w SLD w celu filtrowania wyświetlanych danych lub za pomocą stylów zewnętrznych w wywołaniach getMap WMS w celu zmiany SLD używanej przez użytkownika do wyświetlenia danej warstwy.

  2. Użyj wywołania Ajax po uwierzytelnieniu użytkownika, aby określić zakresy map, aby umożliwić użytkownikowi przemieszczanie się tylko wokół określonego obszaru. Możesz także użyć layerVisibility (), aby ograniczyć również wyświetlanie danych.

Mark Cupitt
źródło
0
  1. Najpierw utwórz adres URL serwera proxy (w języku programowania).
  2. Ten adres URL serwera proxy trafi do geo-serwera.
  3. W tym adresie URL serwera proxy można przeprowadzić uwierzytelnianie za pomocą odnośników Użytkownicy i strony. Możesz sprawdzić, czy adres URL jest odsyłany z aplikacji internetowej, czy nie. Jeśli nie, po prostu wyślij Nieautoryzowany Nagłówek.
  4. Trafisz ten adres URL serwera proxy zamiast adresu URL serwera geo.
  5. Nikt nie będzie wiedział, jaki jest dokładny adres Geoservera i nie będzie w stanie go zhakować.
  6. W celu zapewnienia bezpieczeństwa użytkownikom wystarczy dodać opcję Użytkownicy w adresie URL serwera proxy.
  7. Z Open Layers podaj adres wms-url jako: http://domainname.com//proxyUrl.php?user=userid
Vine Arora
źródło