ArcGIS Server 基於Token安全驗證

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

Proxy

相關文章
相關標籤/搜索