[ ArcGIS for Server 10.1 系列 ] - 动态获取权限Token

 

       ArcGIS Server 对服务提供了完善的安全控制,例如:对同一个Map服务,不同的用户具有不同的权限,这些让实际业务中部门之间、区域之间的权责控制变的很简单。

       ArcGIS Server 对安全控制主要基于的方式有:token方式 和 http认证,其标准名称: token-based authentication or HTTP (including Windows) authentication。

      什么叫token方式?

      相信都见过类似于这样uri请求信息:http://****/arcgis/rest/services/wangsh/online/MapServer/export?token=kDeM8yqEdwFCSKkcy8AxRZQ_tWBdMzIgmfdY9bs8WsQTnlw-lkUfo7NDusVqSf9R,或者用httpwatch/fiddler跟踪过ags操作的http请求,有些http请求的body、header或者cache中,有agstoken、token、ags_admin_token的属性,属性内容为一串没有规则的长字母串,就说明这个服务是授权模式为ArcGIS Tokens的。

       什么叫http认证?

      相信大家都部署过tomcat 服务器,在查看web应用或者服务时,弹出对话框,需要输入tomcat的用户名和密码,而这种方式是基于http认证模式。验证信息包含在http请求的header传递到后台,tomcat根据提供的信息确定是否授权。

     

    

      对上述经过token授权的map服务。开发的web应用程序,如何使用这服务的地图资源呢? 已经获得了使用权限的用户名和密码,如何给这个地图资源授权?  再者,对于实际业务系统登录以后,如何看到该用户权限的地图资源?

 

      这些都需要获得token,然后用这个token初始化地图。

      token初始化地图的方式,以初始化动态图层为例:     

1                 // layerUri地图服务的路径
2                 layerUri = layerUri + "?token=" + _token; 
3                 var basemap = new esri.layers.ArcGISDynamicMapServiceLayer(layerUri);
4                 map.addLayer(basemap);

 

      接下来是如何获取token?

      要求:在初始化地图之前,就需要事先获得token。

     

 

      如上图所示,在ArcGIS for Server 10.1中提供了Admin Api,可以根据授权的用户名和密码动态获取到token,获取token的方式有:IP和Referer两种,

      1、IP方式获取token。需要提供浏览GIS页面的客户端ip,比如你浏览http://www.gisall.com/updoogis/map.htm这个GIS页面那这个IP为你机器的IP,而不是承载这个GIS 页面的web server机器的IP。

      2、Referer方式获取token。需要你提供GIS页面所在的项目工程路径,如:http://www.gisall.com/updoogis/

  

      在实际应用中,GIS Servers 和 应用的Web Server 一般不会部署在一台机器上,或者说不会在同一个域内(跨域的概念:域名或者端口,任何一个不同就是跨域,也包括localhost和域名,IP和域名也都是属于跨域) 。

      所以,直接从客户端操作 ags admin Rest API 的generateToken,属于跨机器,涉及到跨域问题。

   

 

 

      我们给出来的方法,做proxy代理来解决跨域问题,(这个代理程序可以是asp.net的.ashx/.aspx,或者java的.jsp,乃至.php都可以)。

      这里环境:前端=javascript,后台=asp.net 为例,通过<script>标签访问代理,获取到token:

      例如:

       <script type="text/javascript" src="http://192.168.130.106:8189/cloudJsAppforBeijing/proxy.ashx?client=referer&referer=http://192.168.130.106:8189/cloudJsAppforBeijing/"></script>

      具体<script>标签内proxy代理路径可以参考 ArcGIS Admin API 接口参数帮助,这里的属性和ags接口参数属性完全一样。


      上述<script>标签就会返回:var layerToken
="kDeM8yqEdwFCSKkcy8AxRZQ_tWBdMzIgmfdY9bs8WsQTnlw-lkUfo7NDusVqSf9R";包含token的脚本, 然后web应用就可以初始化地图资源。

 

 

 

      proxy具体代码 下载  

    

 

 

       

 

 

 

 

posted @ 2011-10-25 17:36  爱图--UpdooGIS  阅读(5323)  评论(2编辑  收藏  举报