ArcGIS API for JavaScript 4.10调用安全地图服务

0
分享 2019-01-23
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/peckerze ... 37010

背景


系统环境:

ArcGIS:10.6.1
ArcGIS API for JavaScript :4.10

需求描述:

Portal和GIS Server联合,同时所访问的地图服务均为安全服务,也就是说服务已经设置了权限控制,只有该用户拥有访问的权限才能调用地图服务。
现在需要在前端业务系统中使用安全服务,但是又不想每次打开系统时,手动登录一次Portal。

解决思路

要使用ArcGIS Enterprise上的安全资源(包括地图服务、WebMap、WebScene、应用APP等),Esri提供了多种方式,具体可以 参考以下链接:
https://developers.arcgis.com/javascript/latest/guide/secure-resources/index.html
今天我们介绍的是采用Token的方式。在JS API中,认证信息的管理维护在IdentityManager接口中,其中generateToken是生成token的函数,registerToken是将token注册到本地的函数。具体的代码详见下述章节:

核心代码

注意:客户端务必先把portal的自签名证书安全在本地!!!
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1,maximum-scale=1,user-scalable=no">
<title></title>
<link rel="stylesheet" href="http://js.arcgis.com/4.10/esri ... gt%3B
<script src="http://js.arcgis.com/4.10/%26q ... gt%3B
<style>
html,
body,
#viewDiv {
padding: 0;
margin: 0;
height: 100%;
width: 100%;
}
</style>

<script>
require([
"esri/Map",
"esri/views/MapView",
"esri/layers/TileLayer",
"esri/layers/MapImageLayer",
"esri/identity/IdentityManager",
"esri/identity/ServerInfo",
"dojo/domReady!"
], function(
Map, MapView,TileLayer,MapImageLayer,esriId,ServerInfo
) {

var baseLayer = new TileLayer({url: "http://map.geoq.cn/arcgis/rest ... ot%3B});

var map = new Map();
map.add(baseLayer);

var view = new MapView({
center: [-80, 35],
container: "viewDiv",
map: map,
zoom: 3
});

//获取Token
var serverInfo = new ServerInfo();
serverInfo.serverString = "http://webgis106.gzs.gd/gisser ... 3B%3B //这里配置ArcGIS Server的REST服务地址
serverInfo.tokenServiceUrl = "https://webgis106.gzs.gd/arcgi ... 3B%3B //由于GIS Server和Portal联合了,所以使用Portal的token生成地址
var userInfo = {username:"portalAdmin",password:"zxcasd123"}; //这里填写Portal的用户和密码
esriId.generateToken(serverInfo,userInfo).then(function(data){
// This is called when the promise resolves
var tokenValue = data.token;
//注册Token,注册之后,在Portal里的所有资源,只要该用户由权限访问,就可以直接使用,之前的所有安全服务请求都将会把token值作为参数发送到服务器端
esriId.registerToken({server:"http://webgis106.gzs.gd/gisser ... ot%3B,token:tokenValue});
}, function(error){
// This function is called when the promise is rejected
console.error(error); // Logs the error message
});

var worldCitiesURL = "http://webgis106.gzs.gd/gisser ... 3B%3B
var layer = new MapImageLayer({url: worldCitiesURL});
map.add(layer);
});
</script>
</head>

<body>
<div id="viewDiv">
</body>

</html>


文章来源:https://blog.csdn.net/peckerzeng/article/details/86237010

0 个评论

要回复文章请先登录注册