Ich versuche, OpenLayers 2.12 zu verwenden, um WMS-Ebenen von einem Server anzuzeigen, auf dem die HTTP-Basisauthentifizierung aktiviert ist.
Ich habe versucht, mit der Authentifizierung umzugehen, indem ich den Benutzernamen und das Passwort in den URL-Parameter meines JavaScript-Codes eingegeben habe. Beispiel für eine Layer-Erstellung:
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
});
Dies ist natürlich nicht sicher, da die Anmeldeinformationen im JavaScript-Code gespeichert sind und nicht in allen Browsern funktionieren. Internet Explorer 8 gibt einen Sicherheitsfehler aus, der auf OpenLayers.js verweist, und verweigert die Anzeige der Karte. Firefox 13 zeigt einige Authentifizierungsdialoge an, die ich abbrechen kann (die Karte wird danach korrekt angezeigt). In Chrome 23 scheint die Authentifizierung einwandfrei zu funktionieren.
Können Sie bestätigen, dass die HTTP-Basisauthentifizierung nicht browserübergreifend gehandhabt werden kann, indem Sie sie in der URL verschlüsseln und OpenLayers wie im Beispiel übergeben?
Können Sie alternative Vorgehensweisen für die HTTP-Basisauthentifizierung vorschlagen, damit diese für den Benutzer transparent funktioniert (es werden keine Authentifizierungs-Popups angezeigt)? Verwenden Sie möglicherweise eine Art Proxy-Server, um dies zu umgehen.
quelle
Antworten:
Die Lösung bestand darin, einen authentifizierenden Proxyserver zwischen dem OpenLayers-Client und dem Back-End-WMS-Dienst hinzuzufügen. Anstatt sich direkt mit dem WMS-Dienst zu verbinden, stellt der OpenLayers-Client eine Verbindung zu einem Proxyserver her, der den Anforderungen die erforderlichen Authentifizierungsheader hinzufügt.
Beispielcode zum Erstellen der Ebenen:
Beispiel für eine Apache-Proxy-Konfiguration:
Sie können mit diesem Stil mehrere Proxy-Konfigurationen verwenden.
Was Sie in die Authorization-Anführungszeichen setzen sollten, ist nur die Base-64-Codierung der Zeichenfolge "Benutzername: Kennwort" (ohne die Anführungszeichen). Weitere Informationen finden Sie unter folgendem Link: /programming/567814/apache2-reverse-proxy-to-an-end-point-the-reverse-basicauth-but-want-to-hide-t
quelle
Sie können eine gefälschte Ajax-Anfrage senden, bevor Sie den Layer zur Karte hinzufügen. Der Browser übernimmt die grundlegende Authentifizierung für Sie:
Dies funktioniert nur, wenn der Server einen für die 401-Authentifizierung erforderlichen Header zurückgibt (in Geoserver müssen Sie die Sicherheitsrichtlinie auf Challenge oder Mixed einstellen).
quelle