寫在前面:只使用token並不能起到安全驗證的做用,ArcGIS Server文件夾的權限是開放的,咱們不須要登陸Server平臺便可訪問服務,因此咱們應該將Token驗證和文件夾的安全性結合起來使用,將文件夾的權限設爲私有,這樣必須先要登陸才能訪問服務。html
當咱們的服務發佈到外網,可是咱們又不但願其餘人員訪問咱們的服務。這時咱們就須要對服務的請求進行驗證,相似於使用用戶名和密碼進行登陸。至關於先用進行驗證,驗證成功再響應服務請求。實質上咱們在請求服務的過程就進行了兩步操做。在ArcGIS API for JavaScript中如何實現這兩步操做?咱們能夠使用代理的方式,即在客戶端和GIS服務器之間再添加一個服務,這個服務首先接收咱們客戶端的請求,而後根據配置文件裏面的用戶名和密碼第一個和GIS服務器握手,並獲取token,將獲取到的token返回到代理服務,代理服務再將咱們客戶端請求的url和token進行合併,向GIS服務器請求服務,GIS服務器解析token,並相應請求給代理服務,代理服務返回結果給客戶端:git
在Web系統中使用Token驗證(.NET版本):github
1.首先,爲ArcGIS Server添加用戶和角色:安全
2.爲服務所在文件夾設置權限,進入到服務--》管理服務--》選中站點--》鼠標放在菜單--》編輯文件夾安全性--》私有--》賦角色:服務器
3.在https://github.com/Esri/resource-proxy/releases 下載代理頁面,咱們只須要proxy.ashx和proxy.config文件,也可選擇本文末尾做者提供的實例(建議使用);dom
4.進入Web工程,將proxy.ashx和proxy.config添加到項目目錄,最好和JS文件在同一目錄;測試
5.修改proxy.config:ui
<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爲用戶密碼。url
6.在require中設置代理:spa
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服務地址爲正確的可訪問服務地址。