ArcGIS Server的安全服务其实并不像大家想的那样艰深,ArcGIS Server Manage作为一个管理服务的工具,可以创建并管理数据库的安全,以及对某些服务以及文件访问的许可。
第一步:在锁定你的服务器前,需要先创建一个数据库来进行安全管理。
登入ArcGIS Server Manager, 点击Security,再点击Setting,Setting窗口里有一个可以连接到database server的wizard(向导),创建一个新的数据库表格去存储许可。在这个过程中,要确定一个复选框,用来自动生成一个user和适合“Everyone”的role,我们在下一步会用到。【疑问:默认绑定的Sql数据库,按照向导可以勾选Everyone角色;但是如果使用Oracle其他数据库的话,如何设置Everyone角色呢?】
第二步:生成角色(roles)和用户(users)
服务许可是通过角色来管理的。当你成功地创建了一个角色以后,你就可以创建一个新的用户或者把已有的用户添加到该角色中。在ArcGIS Server Manager wizard中可以非常轻松地完成这个用户和角色的创建。
第三步:锁定你的服务
现在有了一个数据库,你就可以锁定你的服务了。
再回到第一步里的“Security”的“Setting”部分。
找到“Security for GIS Services is: Not Enabled”,这旁边有一个按钮是“Enable”
注意:一旦你选择了这个“Enable”,你在ArcGIS Server Manager中就不能取消了,不过也不用害怕,在接下来的一步中你可以解决这个问题。
第四步:在root级别中,给“Everyone”授予许可
现在你是被锁定的,你需要给你的服务授予许可。
接下来的几步是假设你有一些公共或私人服务。即时security是打开的,我们也想确保我们的公共服务仍然是公开的,而不需要用户名/密码。
点击“Services”键,这里应该是会自动到“Manage Services”去,如果没有,请在你的根目录里改变“Services In”的下拉值,然后点击Manage Folders -> Permissions,在根目录中,通过添加访问名单到role中来授予“Everyone”许可。
这样security就打开了,但是你的服务还是公开的。我建议在安装ArcIGIS Server时就完成以上步骤,这样就可以在需要时快速添加许可。
第五步:锁定ArcGIS Server文件夹
现在你的服务都是公开的,如果需要专门锁定某些服务应该怎样呢?
如果你的服务是在文件夹中,就很容易办到了。现在假设你的文件夹叫“Private”,你需要把“Services in”中的值修改成你的private文件夹,然后,点击Manage Folders - > Permissions,添加你创建的role到这个文件夹,并确定从访问名单中移除“Everyone”。
现在该文件夹中的服务就会要求输入与这个role关联的用户名和密码了。
第六步:通过REST界面访问受保护的文件夹
如果你正在用ArcGIS Server Javascript. API开发应用程序,那么REST界面就是你最好的朋友。但是,你会发现你锁定的文件夹不显示在你的服务根目录下:
http://<servername>/ArcGIS/rest/services
访问“Private”文件夹,直接输入受保护文件夹的URL:
http://<servername>/ArcGIS/rest/services/Private
这样就会打开一个登入窗口,然后输入用户名/密码进行访问。
第七步:在ArcGIS Server for Javascript. API app中应用一个受保护的服务
接下来介绍如何在公开的ArcGIS Server for Javascript. API app中嵌入受保护的服务,这样做的目的就是使用户无需获取你的服务的URL而是直接在他们自己的app中应用。
为了节省篇幅,这里就假设你已经有了一个代理页面设置在你的app中,如果没有,那可能有两种情况,一种是没有刷新页面,还有一种就是查询结果超过2000个字符,IE无法获得返回数据。以下是一个设置你的代理的链接:
既然假设你已经有了一个代理设置,那么第一步就是在你的JavaScript中更新你的代理设置。
现在你是被保护的,而你每一次查询都将会利用这个代理页面,如果不是这样,就把app中的“alwaysUseProxy”设置成“true”。
第八步:基于token的验证
基于token的验证是用来验证那些应用了JavaScript. API的ArcGIS Server服务。这里有两种方法:1.通过token生成页面来创建一个token;2.创建一个动态token。
方法1:通过token生成页面来创建一个token
在ArcGIS Server安装程序的security中你可以访问到一个token生成页面:
http://<servername/ArcGIS/Tokens/ gettoken.html(你也可以从REST界面上找到这个页面)输入一个有效的用户名/密码,并返回一个token值。
改变proxy.config中的http改为https,在proxy.config文件中复制粘贴这个token到服务URL中。
下面是ESRI help中的例子:
<serverUrl url="https://www.example.com/arcgis/rest/services/MyMapSecureService/MapServer" matchAll="false"token="5fFo4%2fI4Tv8IGSqSYbpUNORRD%2fYxXMSPo6NEHNNGMpt9CMknpXIjEVqYGm3uuQnU" ></serverUrl>
token生成页面默认的这个token只能用10天,你可以在ArcGIS Server Manager中修改,或者你也可以按照下面这个方法设置你的服务。
方法2:创建一个动态token
如果你想创建一个动态token,就必须先下载一个新的proxy.ashx页面。
之前我们粘帖过一个ESRI的users forums是关于这个操作的,里面有新的代理文件,可以从下面这个链接下载:
http://forums.esri.com/Thread.asp?c=158&f=2396&t=297001#926770
下载完这个zip文件后,替换掉你原来的proxy.ashx页面,然后再在proxy.config文件中更新你的服务的URL,将http改成https,添加下面的新属性:
dynamicToken="true"
host=""
userName=""
password=""
带Token值rest方式访问服务的格式:http://ip/ArcGIS/rest/services/服务名/MapServer?token=Token值,获取的token值是由客户端访问的ip地址生成。