寫在前面:只使用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服務地址為正確的可訪問服務地址。