Saya mencoba menggunakan OpenLayers 2.12 untuk menampilkan lapisan WMS dari server yang telah mengaktifkan otentikasi dasar HTTP.
Saya telah mencoba menangani otentikasi dengan memasukkan nama pengguna dan kata sandi dalam parameter URL dalam kode JavaScript saya. Contoh pembuatan layer:
myLayer = new OpenLayers.Layer.WMS('background',
'https://username:[email protected]/rasteriaineistot/image?',
{
layers: 'background',
bbox: '-380188,6249943,1347312,8226943'
},
{
displayInLayerSwitcher: true,
isBaseLayer: false,
projection: 'EPSG:3067',
visibility: true
});
Tentu saja ini tidak aman karena kredensial disimpan dalam kode JavaScript dan tidak berfungsi di semua browser. Internet Explorer 8 memberikan kesalahan keamanan yang menunjuk ke OpenLayers.js dan menolak untuk menampilkan peta sama sekali. Firefox 13 memunculkan beberapa dialog otentikasi yang dapat saya batalkan (peta ditampilkan dengan benar setelah itu). Di Chrome 23 otentikasi tampaknya berfungsi dengan sempurna.
Bisakah Anda mengonfirmasi bahwa tidak mungkin untuk menangani otentikasi dasar HTTP dengan cara lintas-peramban dengan menyandikannya di URL dan memberikannya ke OpenLayers seperti dalam contoh ini?
Bisakah Anda menyarankan cara-cara alternatif untuk menangani otentikasi dasar HTTP sehingga bekerja secara transparan kepada pengguna (tidak ada popup otentikasi yang ditampilkan)? Mungkin menggunakan beberapa jenis server proxy untuk mengatasi ini.
sumber
Jawaban:
Solusi yang akhirnya kami tambahkan adalah menambahkan server proxy yang mengotentikasi antara klien OpenLayers dan layanan WMS backend. Jadi alih-alih terhubung langsung ke layanan WMS, klien OpenLayers menghubungkan ke server proxy yang menambahkan header otentikasi yang diperlukan untuk permintaan.
Kode contoh untuk membuat layer:
Contoh konfigurasi proxy Apache:
Anda dapat memiliki beberapa konfigurasi proxy menggunakan gaya ini.
Apa yang harus Anda masukkan ke dalam kutipan Otorisasi hanyalah pengkodean basis-64 dari string "nama pengguna: kata sandi" (tanpa tanda kutip). Untuk informasi lebih lanjut, lihat tautan ini: /programming/567814/apache2-reverse-proxy-to-an-end-point-that-requires-basicauth-but-want-to-hide-t
sumber
Anda dapat mengirim permintaan ajax palsu sebelum menambahkan layer ke peta. Browser akan menangani otentikasi dasar untuk Anda:
Ini hanya akan berfungsi jika server mengembalikan header 401 - auth diperlukan (dalam geoserver Anda harus mengatur kebijakan keamanan untuk menantang atau dicampur)
sumber