当前位置: 代码迷 >> CGI >> ArcGIS 10.1 for Server 保险机制(2)使用Token
  详细解决方案

ArcGIS 10.1 for Server 保险机制(2)使用Token

热度:562   发布时间:2012-10-05 15:34:33.0
ArcGIS 10.1 for Server 安全机制(2)使用Token

1  关于Token

在本系列第一篇博客中已经介绍了用户、角色、权限,在访问这些经过权限设置的服务时,会有用户认证和权限验证两个主要的步骤:

用户认证:判断用户输入的用户名是否存在,密码是否正确;

权限验证:判断该用户是否对请求的资源具有访问权限。

认证的方式有两种:基于ArcGIS Token的认证和Web服务器认证,本文将介绍最常用的第一种认证方式。

简单说,Token就是一串包含了用户信息的加密字符串,用于在网络上安全传输用户信息。

2  申请Token

使用Token前首先需要申请Token,可以通过http://myserver:6080/arcgis/admin/generateToken或http://myserver:6080/arcgis/tokens申请。申请页面如下图所示:

需要填写的内容如下:

1)       Username:用户名,例如我在上一篇博客里创建的chengdu;

2)       Password:用户密码;

3)       Client:使用token的客户端,提供三种类型:HTTP Referer、IP、IP Requested,区别如下:

l HTTP Referer:Web应用的URL,申请的token可由该应用的页面使用;

l IP:申请的token只能供指定IP的机器使用;

l IP Requested:只能由申请token的机器使用该token;

4)       HTTP referer:如果Client选择了HTTP referer,这里就需要输入应用地址;

5)       IP:如果Client选择了IP,这里就需要输入IP地址;

6)       Expiration:过期时间,单位为分钟。超过这里设置的时间,token将失效。

设置好后,点击Generate按钮,得到生成的token字符串,如下图

3 使用Token

将上一步骤生成的token复制到代码中,如下:
    ArcGISDynamicMapServiceLayer dynLayer = new ArcGISDynamicMapServiceLayer();
    dynLayer.Url = "http://esri-huangd/arcgis/rest/services/sw/sw_provinces/MapServer";
    dynLayer.Token = "wE0oaYBQiQkXWArrP6Pw3Y3dNw_WEP3rDEsMJTd9C-3StWDwtqrKYaRQc75FWbdc7ZasJpfS3klSdU38qYXVxw..";
    dynLayer.InitializationFailed += new EventHandler<EventArgs>(Layer_InitializationFailed);

    map.Layers.Add(dynLayer);

访问效果如下图:

如果将为token赋值的代码注释掉,再访问,得到如下提示:

如果随意篡改token字符串,再访问,得到如下提示:

如果以其他未授权的用户(beijing)申请token,然后再访问,得到如下提示:

以上就是通过token访问ArcGIS服务资源的案例,通过这种方式,可以确保程序在授权的情况下才能访问GIS服务资源,从而保护服务资源的安全。

在实际应用中,需要更新共享密钥(Shared Key,一个16位的随机字符串,用于生成加密的token),因此token也有更新的必要,另外token过期之后,也需要重新申请更新。如果将token硬编码在程序代码中,则需要在token更新之后更新代码并重新编译程序,故建议在程序中动态申请token,以保证程序中使用最新的token。
  相关解决方案