ArcGIS Server 基于Token密匙

一、ArcGIS Server 基于Token安全验证

写在前面:只使用token并不能起到安全验证的作用,ArcGIS Server文件夹的权限是开放的,我们不需要登录Server平台即可访问服务,所以我们应该将Token验证和文件夹的安全性结合起来使用,将文件夹的权限设为私有,这样必须先要登录才能访问服务。

当我们的服务发布到外网,但是我们又不希望其他人员访问我们的服务。这时我们就需要对服务的请求进行验证,类似于使用用户名和密码进行登录。相当于先用进行验证,验证成功再响应服务请求。实质上我们在请求服务的过程就进行了两步操作。在ArcGIS API for JavaScript中如何实现这两步操作?我们可以使用代理的方式,即在客户端和GIS服务器之间再添加一个服务,这个服务首先接收我们客户端的请求,然后根据配置文件里面的用户名和密码第一个和GIS服务器握手,并获取token,将获取到的token返回到代理服务,代理服务再将我们客户端请求的url和token进行合并,向GIS服务器请求服务,GIS服务器解析token,并相应请求给代理服务,代理服务返回结果给客户端:

在Web系统中使用Token验证(.NET版本):

  1. 首先,为ArcGIS Server添加用户和角色:

2.为服务所在文件夹设置权限,进入到服务--》管理服务--》选中站点--》鼠标放在菜单--》编辑文件夹安全性--》私有--》赋角色:

3.在https://github.com/Esri/resource-proxy/releases 下载代理页面,我们只需要proxy.ashx和proxy.config文件,也可选择本文末尾作者提供的实例(建议使用);

4.进入Web工程,将proxy.ashx和proxy.config添加到项目目录,最好和JS文件在同一目录;

5.修改proxy.config:

<serverUrl url ="http://192.168.1.6:6080/arcgis/rest/services"
               matchAll="true"
               dynamicToken="true"
               host="192.168.1.6:6080"
               userName="yangtao"
               password="262728"></serverUrl>
修改url中ip为GIS服务器ip;host也为GIS服务器ip;userName为在Server里面添加的用户;password为用户密码。

6.在require中设置代理:

esriConfig.defaults.io.proxyUrl = "proxy.ashx";
esriConfig.defaults.io.alwaysUseProxy = true;

alwaysUseProxy为true表示始终使用代理,在测试过程,若底图使用ersi地图,出现错误,用天地图则跳过代理,实现只是对服务使用代理。

目录结构:

index.html、proxy.confog和proxy.ashx统计目录,也可以不同级。

proxy.config配置实例:

<serverUrl url ="http://192.168.1.6:6080/arcgis/rest/services"
               matchAll="true"
               dynamicToken="true"
               host="192.168.1.6:6080"
               userName="yangtao"
               password="262728" 
               ></serverUrl>

 

客户端调用实例:

require(["esri/map", "esri/config", "esri/layers/ArcGISDynamicMapServiceLayer", "extras/TDTRoadLayer", "dojo/domReady!"],
            function (Map, esriConfig, ArcGISDynamicMapServiceLayer, TDTRoadLayer) {
            esriConfig.defaults.io.proxyUrl = "proxy.ashx";
            esriConfig.defaults.io.alwaysUseProxy = true;
            var map = new Map("map", {
                center: [104, 30],
                zoom: 8
            });
            var layer = new TDTRoadLayer();
            map.addLayer(layer);
            var dynamicMapServiceLayer = new ArcGISDynamicMapServiceLayer("http://192.168.1.6:6080/arcgis/rest/services//test/china/MapServer");
            map.addLayer(dynamicMapServiceLayer);
        });

 1.对于下载的附件,需要修改proxy,config里面的参数(url、host、userName、password四个参数);

2.修改index.html中ArcGISDynamicMapServiceLayer服务地址为正确的可访问服务地址。

二、ArcGIS Token Service 申请密匙

登录ArcGIS Server服务管理器http://IP:6083/arcgis/tokens/generateToken,输入授权账户名、密码、请求方式、密匙使用期限。

点击Generate Token获取密匙

三、arcgis api for JavaScript

<script>
        var map;
        require(["esri/map",
                "src/TDMapLayer",
                "src/TDMapAnnoLayer",
                "src/TDMapImageLayer",
                "esri/layers/FeatureLayer",
                "esri/geometry/Point",
        		"esri/layers/ArcGISDynamicMapServiceLayer",
                "dojo/domReady!"],
            function (Map,
                      TDTLayer,
                      TDTAnnoLayer,
                      TDMapImageLayer,
                      FeatureLayer,
                      Point,ArcGISDynamicMapServiceLayer
            ){
                map = new Map("map", { logo: false });
                var basemap = new TDTLayer();
                //var basemap = new TDMapImageLayer();
                map.addLayer(basemap);
                var annolayer = new TDTAnnoLayer();
                map.addLayer(annolayer);
        		//var test = new ArcGISDynamicMapServiceLayer("http://192.168.4.239:6080/arcgis/rest/services/other/test_tianditu/MapServer");
        		var test = new ArcGISDynamicMapServiceLayer("http://61.50.105.254:6083/arcgis/rest/services/tianjin/WWZ_JZsytle/MapServer?token=VSYowJLPU9Mjm9a-ZIrowjQzt8zVPTCJAYZX-m2XLFdzPMYmJbDF4WPiRtpQEmQK");
        		map.addLayer(test);
                //var pt = new Point(112.206,32.13);
                var pt = new Point(117.262,38.895);
                map.centerAndZoom(pt, 12);
            });
    </script>

四、Openlayers

 var token = VSYowJLPU9Mjm9a-ZIrowjQzt8zVPTCJAYZX-m2XLFdzPMYmJbDF4WPiRtpQEmQK;
        //王稳庄道路地图
        function layer2() {
          //Map.setCenter([117.20254822800007,38.84896601300005], 15);
          Map.createTitleLayer('image',{
            create: true,
            layerType: 'Tile',
            addLayer: true,
            //layerUrl: 'http://61.50.105.254:6083/arcgis/rest/services/tianjin/wangwenzhuagn_dynamic/MapServer'
			layerUrl: 'http://61.50.105.254:6083/arcgis/rest/services/tianjin/WWZ_JZsytle/MapServer',
			params :{
				token:token
			}				
          });
          Map.zoomToExtent([117.20254822800007,38.84896601300005,117.31731513400007,38.930471141000055])
        }

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
获取 ArcGIS Server Token 可以通过调用 ArcGIS REST API 实现,具体步骤如下: 1. 构造请求 URL ``` http://<arcgis-server>/arcgis/tokens/generateToken ``` 其中 `<arcgis-server>` 是 ArcGIS Server 的主机名或者 IP 地址。可以根据需要添加端口号和上下文路径。 2. 添加请求参数 Token API 需要添加以下请求参数: - `username`: ArcGIS Server 用户名 - `password`: ArcGIS Server 密码 - `client`: 客户端类型,可以是 `requestip`、`referer` 或者 `ip` - `expiration`: Token 的过期时间,单位是分钟,默认为 60 分钟 - `f`: 返回结果的格式,可以是 `json` 或者 `xml` 示例请求 URL: ``` http://<arcgis-server>/arcgis/tokens/generateToken?username=myusername&password=mypassword&client=requestip&expiration=120&f=json ``` 3. 发送请求并解析结果 可以使用 Java 的 HTTP 客户端库,如 Apache HttpClient 或者 HttpURLConnection 发送请求,并解析返回结果。在返回结果中,可以获取 `token` 字段的值,即为生成的 ArcGIS Server Token。 示例代码: ``` String url = "http://<arcgis-server>/arcgis/tokens/generateToken?username=myusername&password=mypassword&client=requestip&expiration=120&f=json"; HttpClient httpClient = HttpClientBuilder.create().build(); HttpGet httpGet = new HttpGet(url); HttpResponse httpResponse = httpClient.execute(httpGet); String response = EntityUtils.toString(httpResponse.getEntity()); JSONObject json = new JSONObject(response); String token = json.getString("token"); ``` 以上代码仅供参考,具体实现需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值