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访问ArcGIS服务资源的案例,通过这种方式,可以确保程序在授权的情况下才能访问GIS服务资源,从而保护服务资源的安全。
在实际应用中,需要更新共享密钥(Shared Key,一个16位的随机字符串,用于生成加密的token),因此token也有更新的必要,另外token过期之后,也需要重新申请更新。如果将token硬编码在程序代码中,则需要在token更新之后更新代码并重新编译程序,故建议在程序中动态申请token,以保证程序中使用最新的token。