2016-04-19 14 views
0

Ich habe OpenLayers in eine Desktop-Anwendung eingebettet und ich versuche, einen WMS-Karten-Layer von einem Server anzufordern, der Authentifizierung erfordert.Basic Auth mit OpenLayers 3

Aufgrund der Umgebung kann ich nicht das Popup haben, das ein Browser normalerweise anzeigen würde, um eine Authentifizierung zu erfordern, und das wäre sowieso für einen Kunden nicht akzeptabel.

Für jetzt möchte ich das Format von https: // {Benutzername}: {Passwort} @ domain.com/wms verwenden?

Wenn ich das an OpenLayers als die URL eines ol.source.TileWMS übergebe, haben die Anfragen den Benutzernamen und das Passwort entfernt und ich sehe immer 401 Fehler zurückgegeben und mit Blick auf die URL der Benutzername und das Passwort wurde abgezogen.

+0

können Sie jquery verwenden, um die Anfrage zu stellen? http://StackOverflow.com/a/5507289/2730610 – Timh

Antwort

0

Sie können versuchen, Ihre Ebene mit einer tileUrlFunction erstellen.

var tileUrlFunction = function(tileCoord, pixelRatio, projection) { 
    if (!tileCoord) { return ""; } 

    var x = tileCoord[1]; 
    var y = tileCoord[2]; 
    var z = tileCoord[0]; 

    return 'https://{username}:{password}@localhost/map-tiles/' + z + '/' + x + '/' + y + '.png'; 
} 

var layers = [ 
    new ol.layer.Tile({ 
    source: new ol.source.XYZ({ 
     tileUrlFunction: tileUrlFunction 
    }) 
    }) 
]; 

EDIT: Die Verwendung von eingebetteten „user: password“ Authentifizierung in der URL wurde von RFC 3986 veraltet, so dass diese nicht mehr mit modernen Browsern.

+0

Ich habe festgestellt, dass viele Browser diese Anfrage blockieren, da die Authentifizierungsdaten in der URL veraltet sind. –

+0

Danke, ich war mir dessen nicht bewusst. –

+1

Gern geschehen! Es ist ein Schmerz, aber mache Sinn. Überlegen Sie sich stattdessen vielleicht http-Header. –