OpenLayers 3 的基本身份验证
Basic auth with OpenLayers 3
我在桌面应用程序中嵌入了 OpenLayers,我正在尝试从需要身份验证的服务器请求 WMS 地图图层。
由于环境的原因,我无法让浏览器通常会显示要求身份验证的弹出窗口,而且客户无论如何也不会接受。
现在我想使用 https://{username}:{password}@domain.com/wms?
的格式
如果我将其作为 ol.source.TileWMS 的 url 传递给 OpenLayers,请求会删除用户名和密码,我总是看到返回 401 错误并查看 url用户名和密码已被剥离。
您可以尝试使用 tileUrlFunction 创建图层。
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
})
})
];
编辑:在 URL 中使用嵌入式“用户:密码”身份验证已被 RFC 3986 弃用,因此这将不再适用于现代浏览器。
我在桌面应用程序中嵌入了 OpenLayers,我正在尝试从需要身份验证的服务器请求 WMS 地图图层。
由于环境的原因,我无法让浏览器通常会显示要求身份验证的弹出窗口,而且客户无论如何也不会接受。
现在我想使用 https://{username}:{password}@domain.com/wms?
的格式如果我将其作为 ol.source.TileWMS 的 url 传递给 OpenLayers,请求会删除用户名和密码,我总是看到返回 401 错误并查看 url用户名和密码已被剥离。
您可以尝试使用 tileUrlFunction 创建图层。
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
})
})
];
编辑:在 URL 中使用嵌入式“用户:密码”身份验证已被 RFC 3986 弃用,因此这将不再适用于现代浏览器。