`
hanyi366
  • 浏览: 284897 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

ArcGIS Server 安全:基于Token(令牌)的验证操作指南

阅读更多

ArcGIS Server的安全服务其实并不像大家想的那样艰深,ArcGIS Server Manage作为一个管理服务的工具,可以创建并管理数据库的安全,以及对某些服务以及文件访问的许可。

 

第一步:在锁定你的服务器前,需要先创建一个数据库来进行安全管理。

登入ArcGIS Server Manager, 点击Security,再点击SettingSetting窗口里有一个可以连接到database serverwizard(向导),创建一个新的数据库表格去存储许可。在这个过程中,要确定一个复选框,用来自动生成一个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无法获得返回数据。以下是一个设置你的代理的链接:

http://resources.esri.com/help/9.3/arcgisserver/apis/javascript/arcgis/help/jshelp/ags_proxy.htm#webprint

既然假设你已经有了一个代理设置,那么第一步就是在你的JavaScript中更新你的代理设置。

现在你是被保护的,而你每一次查询都将会利用这个代理页面,如果不是这样,就把app中的“alwaysUseProxy”设置成“true”。

 

第八步:基于token的验证

基于token的验证是用来验证那些应用了JavaScript. APIArcGIS Server服务。这里有两种方法:1.通过token生成页面来创建一个token2.创建一个动态token

 

方法1:通过token生成页面来创建一个token

ArcGIS Server安装程序的security中你可以访问到一个token生成页面:

http://<servername/ArcGIS/Tokens/ gettoken.html(你也可以从REST界面上找到这个页面)输入一个有效的用户名/密码,并返回一个token值。

改变proxy.config中的httphttps,在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页面。

之前我们粘帖过一个ESRIusers 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地址生成。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics