Come mettere i livelli di GeoServer dietro l'autenticazione?


29

Voglio pubblicare livelli di mappe usando OpenLayers e GeoServer. Sebbene sia abbastanza facile da configurare, sono un po 'perso quando si tratta di possibilità di autenticazione. Quello che voglio è creare diversi utenti che, accedendo con il proprio nome utente e password, saranno indirizzati alla propria finestra della mappa. Come è possibile farlo in modo sicuro in modo che nessuno dei miei utenti sia in grado di accedere ai reciproci livelli?

Ho capito che è abbastanza facile "hackerare" l'installazione, ad esempio, facendo delle query al GeoServer dove si chiede semplicemente di elencare tutti i livelli disponibili.

Quali sono le mie opzioni? Suppongo che Apache potrebbe essere di aiuto durante l'impostazione nel mio server Ubuntu? Qualche tutorial su questo argomento?

Risposte:


20

Prima di tutto, penso che dovresti leggere la documentazione Geoserver sulla sicurezza. http://docs.geoserver.org/stable/en/user/security/index.html scoprirai che è possibile rendere i livelli accessibili / inaccessibili a utenti o ruoli diversi.

Un'altra possibile soluzione sarebbe quella di rendere inaccessibile il geoserver dal mondo esterno (chiudere la porta 8080 sul server per IP diverso dall'host locale) e quindi creare un meccanismo di autenticazione nel linguaggio di programmazione Web di propria scelta.

Ad esempio: è possibile impostare una sorta di login / autenticazione in php che inoltra le richieste al geoserver su localhost dopo l'autenticazione.


Inoltre: è possibile disporre di una tabella di ricerca con associazioni tra Utenti dell'applicazione e Utenti / Ruoli / Livelli del GeoServer e applicare la sicurezza a livello di livello su GeoServer. Pertanto, quando il proxy di OpenLayer richiede un livello, cerca le credenziali del Geoserver corrispondenti, le autentica e restituisce il livello a cui ha accesso. In questo modo l'utente può provare a richiedere qualsiasi altro livello che desidera ma non lo otterrà a meno che non abbia accesso ad esso.
CaptDragon,

9

Puoi dare un'occhiata a GeoPrisma

Avevamo bisogno di creare un'applicazione di mappatura Web con sicurezza su set di dati sensibili. Ciò avrebbe potuto essere realizzato con più applicazioni e inserendo un accesso standard + password per accedervi, ma il progetto era troppo grande e sarebbe stato molto complesso da mantenere. L'aggiunta di un nuovo set di dati, ad esempio, richiederebbe modifiche manuali di ogni applicazione, regolazioni della sicurezza, ecc.

Ecco perché abbiamo deciso di sviluppare la nostra applicazione di mappatura Web che includeva il controllo degli accessi su set di dati utilizzando le applicazioni di mappatura Web OpenSource disponibili.

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

Avrei una scansione della documentazione - potrebbe essere eccessivo aggiungerlo a un semplice progetto se hai solo pochi livelli / utenti sul tuo sistema. Se hai centinaia di utenti / gruppi con diritti di modifica su diversi set di dati, probabilmente ha senso usare un progetto esistente come GeoPrisma.

Altrimenti la sicurezza del server Web standard costruita attorno a HTTP sarebbe probabilmente sufficiente.


GeoPrisma può essere utilizzato con GeoServer? Hanno una comprovata esperienza?
Mimo,

Può essere utilizzato con qualsiasi server WMS incluso GeoServer. Commenti aggiunti sopra.
geographika,

0

Si prega di eseguire il debug di questa affermazione

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

quando si passa il valore di FORMATO come parametri dell'URL, si ottiene la mappa (immagine) dal server. Se lo si ottiene, il proxy dovrebbe funzionare correttamente.


0

Un approccio sarebbe quello di implementare un proxy come questo in grado di verificare le credenziali di un utente come effettuato l'accesso utilizzando le variabili di sessione e consentire loro solo di accedere alle risorse a cui hanno diritto, vale a dire: controllare l'URL per i livelli che vengono chiamati e negare l'accesso se l'utente non è autorizzato a visualizzarli.

In termini di quali dati possono vedere, se si tratta di un sottoinsieme di un set di dati più grande, questo è un po 'più complicato ma vedo due approcci.

  1. Utilizzare le viste SQL con parametri per controllare quali dati l'utente visualizzerebbe. È possibile utilizzare il proxy per modificare l'URL prima che venga passato a Geoserver con i parametri specifici per quell'utente. È inoltre possibile inviare i parametri a Openlayers tramite una chiamata Ajax dopo che l'utente è stato autenticato e fornire i parametri come parte della chiamata getMAP WMS in OpenLayers. I dati effettivi visualizzati potrebbero essere gestiti dalla sostituzione delle variabili in SLD per filtrare i dati visualizzati o utilizzando gli stili esterni nelle chiamate getMap WMS per modificare lo SLD utilizzato da un utente per visualizzare un determinato livello.

  2. Utilizzare una chiamata Ajax dopo l'autenticazione utente per specificare le estensioni della mappa per consentire all'utente di spostarsi solo intorno a un'area specificata. Puoi anche usare layerVisibility () per limitare anche i dati che possono essere visualizzati.


0
  1. Innanzitutto crea un URL proxy (nel tuo linguaggio di programmazione).
  2. Questo URL proxy verrà inviato al geo-server.
  3. In questo URL proxy, è possibile eseguire l'autenticazione con Utenti e riferimenti pagina. Puoi verificare che l'URL venga indirizzato dalla tua webApp o meno. In caso contrario, inviare semplicemente un'intestazione non autorizzata.
  4. Colpirai questo URL proxy anziché l'URL del tuo geo-server.
  5. Nessuno sarà in grado di sapere che qual è l'URL esatto di Geoserver e non sarà in grado di hackerarlo.
  6. Per Sicurezza con gli utenti, è sufficiente aggiungere un controllo di Utenti nell'URL proxy.
  7. Da Open Layers passa il wms-url come: http://domainname.com//proxyUrl.php?user=userid
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.