Próbuję użyć OpenLayers 2.12 do wyświetlenia warstw WMS z serwera z włączoną funkcją podstawowego uwierzytelniania HTTP.
Próbowałem obsłużyć uwierzytelnianie, wpisując nazwę użytkownika i hasło w parametrze URL w moim kodzie JavaScript. Przykład tworzenia warstwy:
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
});
Oczywiście nie jest to bezpieczne, ponieważ poświadczenia są przechowywane w kodzie JavaScript i nie działają we wszystkich przeglądarkach. Internet Explorer 8 wyświetla błąd bezpieczeństwa wskazujący na OpenLayers.js i w ogóle nie wyświetla mapy. Firefox 13 wyświetla niektóre okna dialogowe uwierzytelniania, które mogę anulować (po tym mapa wyświetla się poprawnie). W Chrome 23 uwierzytelnianie wydaje się działać bezbłędnie.
Czy możesz potwierdzić, że nie można obsłużyć podstawowego uwierzytelniania HTTP w sposób przeglądarkowy, kodując go w adresie URL i przekazując OpenLayers jak w przykładzie?
Czy możesz zasugerować alternatywne sposoby obsługi podstawowego uwierzytelniania HTTP, aby działało ono w sposób przejrzysty dla użytkownika (nie wyświetla się wyskakujące okienko uwierzytelnienia)? Być może użyj jakiegoś serwera proxy, aby obejść ten problem.
źródło
Odpowiedzi:
Rozwiązaniem, które zakończyliśmy, było dodanie uwierzytelniającego serwera proxy między klientem OpenLayers a usługą WMS zaplecza. Zamiast więc łączyć się bezpośrednio z usługą WMS, klient OpenLayers łączy się z serwerem proxy, który dodaje wymagane żądania do nagłówków uwierzytelniania.
Przykładowy kod do tworzenia warstw:
Przykładowa konfiguracja serwera proxy Apache:
Korzystając z tego stylu, możesz mieć wiele konfiguracji proxy.
To, co powinieneś umieścić w cudzysłowie autoryzacji, to po prostu kodowanie base-64 ciągu „nazwa użytkownika: hasło” (bez cudzysłowów). Aby uzyskać więcej informacji, zobacz ten link: /programming/567814/apache2-reverse-proxy-to-an-end-point-that-requires-basicauth-but-want-to-hide-t
źródło
Możesz wysłać fałszywe żądanie ajax przed dodaniem warstwy do mapy. Przeglądarka obsłuży dla Ciebie podstawowe uwierzytelnianie:
Działa to tylko wtedy, gdy serwer zwróci nagłówek wymagający uwierzytelnienia 401 (w geoserver musisz ustawić politykę bezpieczeństwa jako wyzwanie lub mieszane)
źródło