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地址生成。


版权申明
出处: http://lmyhao.cnblogs.com/
版权:本文版权归作者和博客园共有
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取 ArcGIS Server Token 可以通过调用 ArcGIS REST API 实现,具体步骤如下: 1. 构造请求 URL ``` http://<arcgis-server>/arcgis/tokens/generateToken ``` 其中 `<arcgis-server>` 是 ArcGIS Server 的主机名或者 IP 地址。可以根据需要添加端口号和上下文路径。 2. 添加请求参数 Token API 需要添加以下请求参数: - `username`: ArcGIS Server 用户名 - `password`: ArcGIS Server 密码 - `client`: 客户端类型,可以是 `requestip`、`referer` 或者 `ip` - `expiration`: Token 的过期时间,单位是分钟,默认为 60 分钟 - `f`: 返回结果的格式,可以是 `json` 或者 `xml` 示例请求 URL: ``` http://<arcgis-server>/arcgis/tokens/generateToken?username=myusername&password=mypassword&client=requestip&expiration=120&f=json ``` 3. 发送请求并解析结果 可以使用 Java 的 HTTP 客户端库,如 Apache HttpClient 或者 HttpURLConnection 发送请求,并解析返回结果。在返回结果中,可以获取 `token` 字段的值,即为生成的 ArcGIS Server Token。 示例代码: ``` String url = "http://<arcgis-server>/arcgis/tokens/generateToken?username=myusername&password=mypassword&client=requestip&expiration=120&f=json"; HttpClient httpClient = HttpClientBuilder.create().build(); HttpGet httpGet = new HttpGet(url); HttpResponse httpResponse = httpClient.execute(httpGet); String response = EntityUtils.toString(httpResponse.getEntity()); JSONObject json = new JSONObject(response); String token = json.getString("token"); ``` 以上代码仅供参考,具体实现需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值