Bagaimana cara menempatkan lapisan GeoServer di belakang otentikasi?

29

Saya ingin menerbitkan lapisan peta menggunakan OpenLayers dan GeoServer. Meskipun ini cukup mudah untuk diatur, saya agak bingung ketika datang ke kemungkinan otentikasi. Yang saya inginkan adalah membuat pengguna yang berbeda yang, dengan masuk dengan nama pengguna dan kata sandi mereka sendiri, akan diarahkan ke jendela peta mereka sendiri. Bagaimana ini bisa dilakukan dengan aman sehingga tidak ada pengguna saya yang dapat mengakses lapisan satu sama lain?

Saya mengerti bahwa cukup mudah untuk "meretas" pengaturan dengan, misalnya, membuat kueri ke GeoServer di mana orang hanya memintanya untuk membuat daftar semua lapisan yang tersedia.

Apa saja pilihan saya? Saya kira apache bisa membantu ketika mengaturnya di server ubuntu saya? Adakah tutorial tentang hal ini?

Mimo
sumber

Jawaban:

20

Pertama-tama, saya pikir Anda harus membaca dokumentasi Geoserver tentang Keamanan. http://docs.geoserver.org/stable/en/user/security/index.html Anda akan menemukan bahwa membuat lapisan dapat diakses / tidak dapat diakses oleh pengguna atau peran yang berbeda.

Solusi lain yang mungkin adalah membuat geoserver tidak dapat diakses dari dunia luar (tutup port 8080 di server Anda untuk IP selain host lokal) dan kemudian buat mekanisme autentikasi sendiri dalam bahasa pemrograman web pilihan Anda.

Misalnya: Anda dapat mengatur semacam login / otentikasi dalam php yang meneruskan permintaan ke geoserver di localhost setelah diautentikasi.

milovanderlinden
sumber
Selain itu: Anda bisa memiliki tabel pencarian yang memiliki asosiasi antara Pengguna Aplikasi Anda dan Pengguna / Peran / Lapisan GeoServer dan menerapkan keamanan tingkat lapisan pada GeoServer. Jadi ketika proksi OpenLayer meminta sebuah lapisan, ia mencari kredensial Geoserver yang sesuai, mengautentikasi mereka, dan mengembalikan lapisan yang ia miliki aksesnya. Dengan cara ini pengguna dapat mencoba untuk meminta lapisan lain yang ia inginkan tetapi tidak akan mendapatkannya kecuali ia memiliki akses ke sana.
CaptDragon
9

Anda bisa melihat GeoPrisma

Kami perlu membuat aplikasi pemetaan Web dengan keamanan pada set data yang masuk akal. Ini bisa dilakukan dengan beberapa aplikasi dan dengan meletakkan login standar + akses kata sandi kepada mereka, tetapi proyek itu terlalu besar dan itu akan sangat kompleks untuk dipelihara. Menambahkan dataset baru misalnya akan memerlukan modifikasi dari setiap aplikasi secara manual, penyesuaian keamanan, dll.

Itu sebabnya kami memutuskan untuk mengembangkan aplikasi pemetaan Web kami sendiri yang mencakup kontrol akses pada kumpulan data menggunakan aplikasi pemetaan Web OpenSource yang tersedia.

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

Saya akan memindai dokumentasi - mungkin akan terlalu banyak untuk menambahkan ini ke proyek sederhana jika Anda hanya memiliki beberapa lapisan / pengguna di sistem Anda. Jika Anda memiliki 100 pengguna / grup dengan hak mengedit pada set data yang berbeda maka mungkin masuk akal untuk menggunakan proyek yang ada seperti GeoPrisma.

Kalau tidak, keamanan server web standar yang dibangun di sekitar HTTP mungkin cukup.

geografi
sumber
Bisakah GeoPrisma digunakan dengan GeoServer? Apakah mereka memiliki rekam jejak yang terbukti?
Mimo
Itu dapat digunakan dengan WMS Server termasuk GeoServer. Komentar ditambahkan di atas.
geografi
0

Silakan debug pernyataan ini

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

ketika Anda melewati nilai FORMAT sebagai parameter URL apakah Anda mendapatkan peta (gambar) dari server, Jika Anda mendapatkannya, maka proxy Anda akan berfungsi dengan baik.

makan
sumber
0

Salah satu pendekatan akan menerapkan Proxy seperti ini yang dapat memverifikasi kredensial pengguna sebagai login menggunakan variabel sesi dan hanya memungkinkan mereka untuk mengakses sumber daya yang mereka berhak, yaitu: memeriksa url untuk lapisan yang dipanggil dan menolak akses jika pengguna tidak diizinkan untuk melihatnya.

Dalam hal data apa yang mungkin mereka lihat, jika itu adalah himpunan bagian dari kumpulan data yang lebih besar, ini sedikit lebih rumit tapi saya melihat dua pendekatan ..

  1. Gunakan Tampilan SQL Parameter untuk mengontrol data apa yang akan dilihat pengguna. Anda bisa menggunakan Proxy untuk mengubah url sebelum diteruskan ke Geoserver dengan parameter khusus untuk pengguna itu. Anda juga dapat mengirim parameter kembali ke Openlayers melalui Panggilan Ajax setelah pengguna diautentikasi dan menyediakan parameter sebagai bagian dari panggilan getMAP WMS di OpenLayers. Data aktual yang ditampilkan dapat ditangani oleh substitusi Variabel di SLD untuk memfilter data yang ditampilkan atau dengan menggunakan Gaya Eksternal dalam panggilan WMS getMap Anda untuk mengubah SLD yang digunakan pengguna untuk menampilkan lapisan yang diberikan.

  2. Gunakan Panggilan Ajax setelah Otentikasi Pengguna untuk menentukan Map Extents agar hanya memungkinkan pengguna untuk berpindah di sekitar area yang ditentukan. Anda juga bisa menggunakan layerVisibility () untuk membatasi data apa yang bisa ditampilkan juga.

Mark Cupitt
sumber
0
  1. Pertama buat URL Proxy (dalam Bahasa pemrograman Anda).
  2. URL Proksi ini akan mengenai geo-server.
  3. Di URL proksi ini, Anda dapat melakukan otentikasi dengan referensi Pengguna & Halaman. Anda dapat memeriksa bahwa url sedang dirujuk dari webApp Anda atau Tidak. Jika tidak cukup kirim Header Tidak Sah.
  4. Anda akan menekan URL proxy ini alih-alih URL geo-server Anda.
  5. Tidak seorang pun akan dapat mengetahui bahwa apa sebenarnya url Geoserver & ia tidak akan dapat meretasnya.
  6. Untuk Keamanan dengan Pengguna, cukup tambahkan cek Pengguna di URL Proxy.
  7. Dari Open Layers, lewati wms-url sebagai: http://domainname.com//proxyUrl.php?user=userid
Vineet Arora
sumber