有两种方法保障ArcGISServer网络服务的安全性:
l 基于令牌的认证
l HTTP(包括windows)的认证。
ArcGIS Server的系统管理员提供了连接安全服务的认证信息。注意,Silverlight程序的源码及其与远程服务器的消息传递,在客户端是能被看到的。这意味着客户端可以通过源代码或请求内容看到认证与令牌信息。
基于令牌的认证
基于令牌加密的服务需要在对地图、查询、地址匹配、地理处理等的请求中包含令牌。令牌是基于认证用户、数据、时间、请求客户端等产生的加密字符串。
要调用要求令牌的服务,需要在程序中获取并使用令牌。令牌可以在程序发布前生成或在运行时实时生成。你可以以下三种方式调用令牌加密的服务:
1. 在调用令牌加密服务的Silverlight组件中创建并使用令牌,这要求在程序涉及阶段完成。
2. 在运行时,根据用户提供的认证信息为他们生成令牌。浏览器提供一个标准的认证对话框供用户输入用户名与密码,所有对该令牌加密服务的交互均基于HTTPS。
3. 在服务图层定义ProxyURL,使用代理页面获取加密服务。代理页面参考:http://help.arcgis.com/en/webapi/silverlight/help/0166/other/SLProxyPage.zip
获取令牌
可以通过令牌服务网页或动态创建令牌。若通过参考页或IP地址能获知客户端ID,则可以通过令牌服务网页创建长期的令牌。动态创建令牌,在运行时产生短期令牌。
通过令牌服务网页创建动态令牌的过程如下:
1. 获取服务的URL;
2. 打开URL;
3. 在页面右上角点击Get Token。若没有看到该连接,则说明该服务不是加密的或它使用HTTP/Windows认证;
4. 这时可以看到ArcGIS认证服务页面。注意,这里使用HTTPS。在该页面输入以下信息:
a) ArcGIS服务器系统管理员提供的用户名与密码。
b) 使用该令牌的应用程序的唯一ID。有两个选项:Web application URL/HTTP Referer or IP address,这时参考页头部不能通过Silverlight设置。若需要创建长期令牌,则使用带代理页面的IP选项。
c) 失效时间。定义令牌的有效期。短期的会相对安全,但需要在老令牌过期前定义新令牌。使用过期的令牌将无法访问ArcGIS服务器的服务。
5. 点击Generate,这时在页面底部出现一个令牌,复制并应用到你的应用程序中。若令牌出现,请检查输入是否正确。
要动态创建令牌,通常需要先构建一个web请求。以下是使用C#与.NET Framework的例子:
string tokenService = "http://hostname/ArcGIS/tokens?request=getToken&username=test&password=my.password&expiration=30";
System.Net.WebRequest request = System.Net.WebRequest.Create(tokenService);
System.Net.WebResponse response = request.GetResponse();
System.IO.Stream responseStream = response.GetResponseStream();
System.IO.StreamReader readStream = new System.IO.StreamReader(responseStream);
theToken = readStream.ReadToEnd();
说明:
如果在Silverlight中创建令牌,则即使使用HTTPS,用户名与密码都将在客户端可见。通常在服务端资源中存储认证(如代理页面),通过服务端资源直接向令牌加密服务发送请求。
在应用程序中使用令牌
在获得有效令牌之后,通过以下两种方式在应用程序中使用令牌:
1. 设置图层或任务的token属性。在设计阶段设置token属性,首现需要通过借助令牌服务网页等方式手动生成令牌。仅适用于短期令牌。
<esri:ArcGISTiledMapServiceLayer
Token="cggEFLivAeuzeEzxqYbt3XVXwJHtBINpCLQdq4YaxmOghNgsnB6iLWjlHsd7xomB"
Url="http://server.arcgisonline.com/ArcGIS/rest/services/ESRI_StreetMap_World_2D/MapServer"/>
2. 使用代理页面。这种方式提供对令牌更高级别的保护。
HTTP/Windows认证
两种途径:
1. 要求用户提供授权认证。
2. 使用代理页面。
说明:没太看懂。