前言:token的使用场景是这样的:
我作为资源持有方,我来发布一个共享服务供其他单位调用。如果什么都不设置,那么谁都可以访问你这个资源。如果只想给特定的单位限定时间的使用,那就要将该资源设置权限,使之无法被所有人访问;然后给使用者开账号并生成token,供其使用。以下内容基本就是:
1 新建角色与账户;
2 隐藏资源,有权限的用户才能访问;
3 用刚才创建的账户去生成token;
4 怎么带token调用资源。
1 新建角色与账户
ArcGIS Server Rest服务针对应用程序来说,是基于角色来授权(不能直接给用户授权)。而用户访问该Rest服务时,只需要提供用户名和密码,ArcGIS Server将找到其对应的角色,验证该角色是否对服务资源具备访问权限。
1.1 角色管理页面(管理员账号登录):http://10.10.5.155:6080/arcgis/manager/roles.html
1.2 创建一个角色
1.3 用户管理页面
http://10.10.5.155:6080/arcgis/manager/users.html
END 1 完成角色与用户创建
2 隐藏资源,面向特定角色访问;
ArcGIS Server权限是赋予给角色对资源的访问能力,权限设置可以对ArcGIS Server服务,也可以对服务文件夹进行设置。如果对文件夹设置权限,则文件夹中的服务自动继承权限;如果是对文件夹中的服务设置权限,则将覆盖从文件夹中继承的权限。
2.1到服务管理页面,选择你要隐藏的资源(或资源所在文件夹)设置其权限为私有,并授予刚创建的角色以访问权限。
http://10.10.5.155:6080/arcgis/manager/index.html
2.2 设置后,资源变为私有,访问地图预览页面即提示需要登录:
END 2 完成隐藏资源,有权限的用户才能访问;
3 用刚才创建的账户去生成token
访问:
http://IP:6080/arcgis/admin/generateToken
或http://IP:6080/arcgis/tokens
申请页面如下图所示:
1) 需要使用该token的用户的用户名(刚才注册的用户user001)
2) 需要使用该token的用户的密码
3) Client:使用token的客户端,提供三种类型:HTTP Referer、IP、IP Requested,区别如下:
3.1) HTTP Referer:Web应用的URL,申请的token可由该应用的页面使用;
3.2) IP:申请的token只能供指定IP的机器使用;
3.3) IP Requested:只能由申请token的机器使用该token;
4) HTTP referer:如果Client选择了HTTP referer,这里就需要输入应用地址;
5) IP:如果Client选择了IP,这里就需要输入IP地址;
6) Expiration:过期时间 ,超过这里设置的时间,token将失效。默认不填有效时间60分钟
设置好后,点击Generate按钮,得到生成的token字符串
END 3 完成token申请
4 怎么带token调用资源
前面已经看到访问加密的资源将会提示需要用户名密码。
在arcgis js api中调用时,加入token值即可,具体参考如下代码中bijieUrl
var map;
require(["esri/map","esri/layers/ArcGISDynamicMapServiceLayer",
"dojo/domReady!"], function (Map,ArcGISDynamicMapServiceLayer) {
map =new Map("map", {
center: [105.259, 27.284],
zoom:11,
maxZoom:17,
minZoom:4,
logo:false
});
var tiledUrl ="https://server.arcgisonline.com/arcgis/rest/services/World_Imagery/MapServer";
var bijieUrl ="http://10.10.5.155:6080/arcgis/rest/services/bijie/bijieouter/MapServer?token=1_k_qoYQrhFlshuH2AnPRou4_o7wqeFx0CbMfXGrrxOgHCSEiWas7WbyrBrmBJxr";
var arcgistiledmapservicelayer =new esri.layers.ArcGISTiledMapServiceLayer(tiledUrl);
var bijieLayer =new ArcGISDynamicMapServiceLayer(bijieUrl);
map.addLayer(arcgistiledmapservicelayer);
map.addLayer(bijieLayer);
});
再次访问,可以正常访问到地图
END 4 完成带token的调用示例
参考: Arcgis for developers:Generate Token
前人经验: