ArcGIS Silverlight 设置token
背景
arcgis for server采用多种安全认证方式。常用的就是就是采用token机制。所以对服务设置了安全,则前端需要提供相对应的token凭证。通常来说设置token有以下两种情形:
一是客户端无需输入凭证的形式。token嵌入在程序中,客户端体验很好,无需输入用户凭证,但这样需要设置长时效的token。
二是通过对话框需要输入用户名和密码。这样需要向服务器端提交用户名和密码,获取服务器的端token,再去请求地图资源。
生成token的方式
arcgis for server的admin中提供了generateToken 操作。如下图1所示:
其中client有三种形式:
ip : 客户端机器的ip地址
requestIp:发出请求的ip地址
referer:应用程序的base url
但是这三种认证方式,只有ip和requestip的形式可以在web 应用程序中使用。但是由于**在Silverlight 4以前的版本,没有办法对Header设置referer,所以referer这种形式不可以在Silverlight api中使用,即使3.2的api中使用的是Silverlight 5 。但是还是没有办法使用referer的形式 **。所以在Silverlight的应用程序中只能通过ip的形式生成token。详细情况参考如下:https://developers.arcgis.com/silverlight/guide/secure-services.htm
设置token
根据官方help中的推荐方式,其建议在服务器端放置一个proxy文件 将token信息存放于proxy文件中。其给出了相关的proxy模板的下载地址:https://developers.arcgis.com/silverlight/guide/other/SLProxyPage.zip
将下载的文件解压到web 服务器,如iis中
打开proxy.json的文件,修改其中的配置文件
<serverItem url="http://192.168.100.82:6080/arcgis/rest/services/MyMapService/MapServer"
matchAll="true"
token="VQTzrWZ6RhESBvab-RORbrA6iTQ5OtLBGnsyLScRdG6Q6saIKUTuvbas_L8LXR-6"/>
其中 url为Silverlight应用程序调用的服务,该地址可以使用根url,如http://192.168.100.82:6080/arcgis/rest/services/ ,当其中有多个服务设置了安全。*NB:必须使用ip地址。一开始我由于在本机测试,使用localhost 一直报invalid token错误
- 调用服务对proxyUrl 指定proxy.ashx 在服务器中的url 如http://192.168.100.82/proxy.ashx
参考代码:
ESRI.ArcGIS.Client.ArcGISDynamicMapServiceLayer pDynamicMaplayer = new ArcGISDynamicMapServiceLayer();
pDynamicMaplayer.Url = "http://192.168.100.82:6080/arcgis/rest/services/MyMapService/MapServer";
pDynamicMaplayer.ProxyURL = "http://192.168.100.82/proxy.ashx";
//pDynamicMaplayer.Token = "VQTzrWZ6RhESBvab-RORbrA6iTQ5OtLBGnsyLScRdG6Q6saIKUTuvbas_L8LXR-6";
myMap.Layers.Add(pDynamicMaplayer);
另一种情境下的token的设置
上面的情形是一种为了方便客户端操作,客户端在无需输入用户名和密码的情况下就具有了加密服务的访问权限。但是在实际的工作中通常是需要客户端提供想对应的用户名和密码,根据凭证与服务器端进行token验证
使用admin api中的getToken操作获取服务器端的token值并添加给arcgis 相关的layer
string tokenurl =
string.Format("https://myserver/arcgis/tokens?request=getToken&username={0}&password={1}&timeout={2}",
username, password, timeout);
WebClient tokenService = new WebClient();
tokenService.DownloadStringCompleted += (sender, args) =>
{
layer.Token = args.Result;
string originalUrl = layer.Url;
if (MyMap.Layers.Contains(layer))
{
layer.Url = null;
layer.Url = originalUrl;
}
else
MyMap.Layers.Add(layer);
};
tokenService.DownloadStringAsync(new Uri(tokenurl));
}
NB:上面的url中使用的是https的协议,这是因为防止在向服务器提交用户名和密码的时候,使用明文密码。使用https协议,这也是arcgis for server支持的另一种安全方式。通过在admin中将http only 的验证方式改为http and htts 或者https only即可
通过identitymanager
identitymanager 是arcgis Silverlight api中提供的类,从api reference来看,其是管理用户凭证。
主要是两类:
基于token的arcgis server的资源和操作
arcgis.com 的加密的资源和
官方的sample中也提供了相对应的sample 参考如下: https://developers.arcgis.com/silverlight/sample-code/start.htm#IdentityManagerServices
ArcGIS Silverlight 设置token的更多相关文章
- 基于 ArcGIS Silverlight API开发的WebGIS应用程序的部署
部署流程概述 在微软的iis服务器上部署基于ArcGIS Silverlight API的应用程序,主要包括以下几个步骤: 1)(可选)部署GIS服务 如果需要将GIS服务也部署在Web服务器上,则 ...
- ArcGIS Server 基于Token安全验证
写在前面:只使用token并不能起到安全验证的作用,ArcGIS Server文件夹的权限是开放的,我们不需要登录Server平台即可访问服务,所以我们应该将Token验证和文件夹的安全性结合起来使用 ...
- 隐藏ArcGIS server设置的用户名
打开注册表编辑器,定位到“HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\ SpecialAccoun ...
- postman设置token关联参数,其他接口直接读取token变量
问题描述:有一个登录接口获取token,其他接口再次访问时都要带上token 解决方案: 步骤一:在登录接口访问后设置postman的环境变量,例如设置环境变量名:token,值为登录接口访问成功后, ...
- arcgis silverlight api 图层介绍
Layer |--TiledMapServiceLayer | |--ArcGISTiledMapServiceLayer |--DynamicLayer | |--DynamicMapService ...
- 转载:postman自动设置token(csrf及authorization token)
原文链接: https://knktc.com/2018/06/03/postman-set-token/ 正文引用: 近期在开发一个Django的项目,由于开启了csrf防护,所以需要在请求的hea ...
- ArcGIS JS 之通过代理配置ArcGIS Server服务 token
ArcGIS JS 代理 1.ArcGIS Server Manager中配置访问服务的用户名.密码.角色等,并配置地图服务的具体角色名称 2.在ArcGIS JS中配置使用代理,下述代码将esri的 ...
- 使用django 的cache设置token的有效期
from rest_framework.authentication import BaseAuthentication from rest_framework.exceptions import A ...
- ArcGIS 如何设置地图显示范围大小
说来惭愧,学ArcGIS也已经有两年了.今天才知道原来ArcGIS是可以设置地图显示范围大小的 打开ArcMap,选择左边图例的图层(Layers) ,右键点击,选择属性(Properties..), ...
随机推荐
- atitit.atiOrm.js v2 q61 版本新特性.docx
atitit.atiOrm.js v2 q61 版本新特性.docx 1. V1新特性如下1 1.1. V2规划,直接生成sql在js端1 2. Orm设计框架图1 2.1. atiOrm.js的原理 ...
- MVC & Entity Framework(1)- 开发环境
一直都有接触asp.net mvc,希望自己借此次机会把Blog搭起来的同时能够更深入地学习相关知识. ①新建 打开VS2012,新建ASP.Net MVC 4项目,接着选择“空”模板(因为不想用自带 ...
- ASP.NET Web API 使用Swagger生成在线帮助测试文档,支持多个GET
以下为教程: 在现有webapi项目中,nuget安装以下两个插件 swagger.net.ui swashbuckle 安装完毕后可以卸载Swagger.NET,此处不需要! 安装完毕后屏蔽以下代码 ...
- 兼容IE getElementsByClassName取标签
function getElementsByClassName(className,root,tagName) { //root:父节点,tagName:该节点的标签名. 这两个参数均可有可无 if( ...
- 浅谈P2P终结者原理及其突破
P2P终结者按正常来说是个很好的网管软件,但是好多人却拿它来,恶意的限制他人的流量,使他人不能正常上网,下面我们就他的功能以及原理还有突破方法做个详细的介绍! 我们先来看看来自在网上PSP的资料:P2 ...
- js上传控件 plupload 使用记录
最近一个项目需要使用一个上传控件进行多图片上传,给用户更好的体验,找到了plupload,用了一下感觉还是不错的, 1.从官网上 可以获得例子 ,我集成到了jsp,如下: <%@ page l ...
- js中对小数取整
js中对小数取整的函数,需要的朋友可以参考下. 1.丢弃小数部分,保留整数部分 js:parseInt(7/2) 2.向上取整,有小数就整数部分加1 js: Math.ceil(7/2) 3,四舍 ...
- 小型云服务器搭建GitLab遇到的坑
云服务商:腾讯云,搞活动买的 3年800块钱,和同时一人一台 配置:1C.1G.50G 用三年,挺划算的 项目中以前一直使用SVN作为代码版本控制,秉着程序员做到老学到老的精神,想尝试一下先进的GIT ...
- Yii2 Restful API 原理分析
Yii2 有个很重要的特性是对 Restful API的默认支持, 通过短短的几个配置就可以实现简单的对现有Model的RESTful API 参考另一篇文章: http://www.cnblogs. ...
- nginx+keepalived构建高可用服务
1.整体环境规划 虚拟IP:10.0.4.248 主Nginx:10.0.4.249 备用Nginx:10.0.4.250 2.keepalived安装 #cd /usr/local/src #wge ...