天天看點

ArcGIS 10.1 for Server Rest服務安全性管理:基于使用者和角色權限

ArcGIS Server權限是賦予給角色對資源的通路能力,權限設定可以對ArcGIS Server服務,也可以對服務檔案夾進行設定。如果對檔案夾設定權限,則檔案夾中的服務自動繼承權限;如果是對檔案夾中的服務設定權限,則将覆寫從檔案夾中繼承的權限。

   ArcGIS Server Rest服務針對應用程式來說,是基于角色來授權(不能直接給使用者授權)。而使用者通路該Rest服務時,隻需要提供使用者名和密碼,ArcGIS Server将找到其對應的角色,驗證該角色是否對服務資源具備通路權限。

<a href="http://s3.51cto.com/wyfs02/M01/12/C3/wKiom1MN2Yjxq6twAAIFmSbrMlY456.jpg" target="_blank"></a>

2 建立使用者

   建立兩個使用者user1和user2,給user1添加角色XJA和XJC,給使用者user2添加角色XJB,如下所示:

<a href="http://s3.51cto.com/wyfs02/M01/12/C3/wKioL1MN2eyAhM6FAAEhriuEFz4281.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M00/12/C3/wKiom1MN2iCAvfnmAAGgHZTS8b4753.jpg" target="_blank"></a>

3    為角色授予通路權限

   給服務JueSe授權角色XJA和XJO才可以通路。

<a href="http://s3.51cto.com/wyfs02/M01/12/C3/wKioL1MN21jD0_KGAADmSlj0ztA813.jpg" target="_blank"></a>

4 驗證

   方法一: 在http://IP:6080/arcgis/rest/login頁面檢視  

   匿名使用者登入,看不到服務JueSe,以使用者user1登入,可以看到JueSe服務,以使用者user2登入,看不到JueSe服務。

   方法二:采用令牌環

使用者名:通路該資源的授權使用者的名字。

密碼:使用者的密碼。

用戶端:使用token的用戶端,提供三種類型:HTTP Referer、IP、Requeste IP,差別如下:

   HTTP Referer:選擇此(預設)選項後,隻能在指定 URL 涉及的請求中使用釋出的令牌。這是發出通路 ArcGIS 資源請求的頁面的 URL。如果通過 ArcGIS API for JavaScript 或基于 REST 的其他應用程式來建構應用程式(各用戶端在此應用程式中發出通過 ArcGIS Server Web 服務直接通路地圖和資料的請求),可使用此方法。

   IP:選擇此選項後,隻能在來自指定 IP 位址的請求中使用釋出的令牌。

   Request IP:選擇此選項後,隻能在來自用于擷取令牌的 IP 位址的請求中使用釋出的令牌。

   注:如果在用戶端應用程式\浏覽器和 ArcGIS Server 之間有代理伺服器,則必須将使用 IP 位址或此請求源的 IP 位址選項生成的令牌綁定到代理伺服器的 IP 位址。如果在用戶端應用程式\浏覽器和 ArcGIS Server 之間有多個負載平衡代理伺服器,則應使用 HTTP Referer 選項。

HTTP referer:如果Client選擇了HTTP referer,這裡就需要輸入應用位址。

有效期:自令牌釋出時間起的持續時間,令牌在此持續時間内有效。

   注:指定的有效期必須小于或等于為長期令牌生命期配置的值。要在管理器中檢視目前令牌屬性,請單擊安全性 &gt; 設定,然後單擊令牌設定旁的編輯圖示。

格式:此參數指定伺服器對此令牌請求所作響應的格式。

   HTML:此選項以字元串格式顯示伺服器釋出的令牌。要使用令牌,請複制字元串并将其附加到對受保護的 ArcGIS Server Web 服務的請求中。

   JSON:此選項傳回 JSON 格式的令牌。當通過 Web 應用程式而不是 Web 浏覽器請求令牌時,使用該選項。

<code>&lt;!DOCTYPE html&gt;</code>

<code>&lt;html&gt;</code>

<code>&lt;head&gt;</code>

<code>    </code><code>&lt;meta http-equiv=</code><code>"Content-Type"</code> <code>content=</code><code>"text/html; charset=utf-8"</code><code>&gt;</code>

<code>    </code><code>&lt;title&gt;我的第一個地圖應用&lt;/title&gt;</code>

<code>    </code><code>&lt;link href=</code><code>"http://localhost/arcgis_js_api/library/3.8/js/esri/css/esri.css"</code> <code>rel=</code><code>"stylesheet"</code> <code>type=</code><code>"text/css"</code><code>&gt;</code>

<code>    </code><code>&lt;script src=</code><code>"http://localhost/arcgis_js_api/library/3.8/"</code><code>&gt;&lt;/script&gt;</code>

<code>    </code><code>&lt;script type=</code><code>"text/javascript"</code> <code>src=</code><code>"jsapi_vsdoc10_v38.js"</code><code>&gt;&lt;/script&gt;</code>

<code>    </code><code>&lt;style type=</code><code>"text/css"</code><code>&gt;</code>

<code>    </code><code>html, body, .MapClass{</code>

<code>            </code><code>padding: </code><code>0</code><code>;</code>

<code>            </code><code>margin: </code><code>0</code><code>;</code>

<code>            </code><code>height: </code><code>100</code><code>%;</code>

<code>    </code><code>}</code>

<code>    </code><code>&lt;/style&gt;</code>

<code>    </code><code>&lt;script type=</code><code>"text/javascript"</code><code>&gt;</code>

<code>        </code><code>dojo.require(</code><code>"esri.map"</code><code>);</code>

<code>        </code><code>//dojo.require("esri.layers.ArcGISTiledMapServiceLayer");</code>

<code>        </code><code>function</code> <code>init() {</code>

<code>            </code><code>var</code> <code>MyMap=</code><code>new</code> <code>esri.Map(</code><code>"MapDiv"</code><code>);</code>

<code>            </code><code>var</code> <code>MyTiledMapServerLayer=</code><code>new</code> <code>esri.layers.ArcGISDynamicMapServiceLayer(</code><code>"http://IP:6080/arcgis/rest/services/xjuMobile/gsmTS/MapServer?token=tyWeXGA1oFQ-I49ZEQ8qzKNZ7EpPByFI0Fh6-rvXJMnEj1Hwp_cKANFRTlTfTVSR"</code><code>);</code>

<code>            </code><code>MyMap.addLayer(MyTiledMapServerLayer);</code>

<code>        </code><code>}</code>

<code>        </code><code>dojo.addOnLoad(init);</code>

<code>    </code><code>&lt;/script&gt;</code>

<code>&lt;/head&gt;</code>

<code>&lt;body&gt;</code>

<code>    </code><code>&lt;div id=</code><code>"MapDiv"</code> <code>class</code><code>=</code><code>"MapClass"</code><code>&gt;&lt;/div&gt;</code>

<code>&lt;/body&gt;</code>

<code>&lt;/html&gt;</code>

參考文檔:http://resources.arcgis.com/zh-CN/help/main/10.2/#/na/0154000005rp000000/

     本文轉自stock0991 51CTO部落格,原文連結:http://blog.51cto.com/qing0991/1363946,如需轉載請自行聯系原作者

繼續閱讀