SuperMap iPortal 提供了一种密钥,简称:Key,它是在线开发中使用的应用密钥,是服务的口令标识。密钥(Key)配合 SuperMap iPortal 服务代理功能,可以保护用户在 iPortal 中注册和托管服务的安全,对于门户中受保护的服务,用户只有通过携带授权给该服务的 Key 才能调用该服务。Key 由24位随机字母+数字组成。
添加密钥(Key)
iPortal 的普通用户和管理员都可以添加密钥。在门户首页,点击“登录”按钮,登录成功后,进入“我的账户”->“我的密钥”,选择“添加密钥”(首次添加密钥时,页面显示的是“获取key”,点击即可),进入添加密钥页面,输入相关参数并选择密钥允许访问的服务,点击“确定”按钮即可添加一个密钥:
- 应用名称:添加的密钥名称,建议与使用 Key 的应用名称一致,便于查找和管理。
- 应用类型:允许访问服务的客户端类型,包括:站点访问和服务请求。
- referer:对应的客户端类型是:站点访问。是指允许访问服务的站点地址,例如:http://www.supermapol.com
- 访问源 IP:对应的客户端类型是:服务请求。是指访问服务客户端 IP,如果设置为 0.0.0.0,将允许所有 IP 访问(测试使用)
- 服务:选择该密钥允许访问哪些服务,列表中会列出当前用户自己注册和托管的非公开的服务(即我的服务)以及所有有权限访问的受保护的服务(不包含公开的服务),点击服务名称,选中该服务,再次点击服务名称,即可取消选中,支持多选。
点击“确定”按钮后,在我的密钥页面即添加一个密钥,“应用密钥(Key)”列显示的是密钥参数,也是用户使用的 Key。一个用户可以添加多个密钥,一个服务也可以对应(或绑定)多个密钥。
使用密钥(Key)
生成的密钥(Key),主要用于在线应用开发过程中,访问受保护的服务时,无需提供用户名和密码,只需在其服务地址后加上密钥(Key)即可。例如:服务访问地址如下:
http://192.168.120.40:8195/iserver/services/map-HunanPopulationDensity/rest.rjson?key=v6ywlc7MJiAY6CQ0Ej4RXWD0
其中,?前的部分是需要调用的服务地址,其后的部分(key=......)是访问需要的密钥请求参数,以此 url 发送请求即可进行访问。
示例:开发者如何使用 SuperMap iClient 调用 iPortal 中受保护的服务,构建一个简单的地图应用呢?
SuperMap iClient 10i JavaScript 在 js 类库中对密钥(key)的使用进行了封装,即无需在每个服务访问请求后面都加“?key=...”,而是通过 SuperMap. SecurityManager 类进行安全验证。
下面以 SuperMap iClient 10i JavaScript 为例,实现在网页中使用 iPortal 中受保护的地图服务:
第一步:下载并解压库文件
从如下任意一个开源社区获取 SuperMap iClient for Javascript 源码:
- GitHub:https://github.com/SuperMap/iClient-JavaScript
- 码云:https://gitee.com/isupermap/iClient-JavaScript
第二步:创建 HTML 显示页面
在本地磁盘任意位置新建文件夹并自定义该文件夹,本示例命名为“MyFirst”;在 "MyFirst”文件夹下用文本编辑工具(如 NotePad++)新建一个“demo.html”的 html 页面,注意将该 html 页面保存为 UTF-8 编码格式,并添加入以下代码:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>访问带key的地图</title> <link rel="stylesheet" href="libs/leaflet/leaflet.css"> <script type="text/javascript" src="libs/leaflet/leaflet.js"></script> <script type="text/javascript" src="dist/iclient9-leaflet.min.js"></script> <style> .panel { margin-bottom: 0; } </style> </head> <body style=" margin: 0;overflow: auto;background: #fff;width: 100%;height:100%;position: absolute;top: 0;"> <!-- 请保证id名一致 --> <div id="iportal_map" style="margin:0 auto;width: 100%;height: 100%"></div> <script> //指定key 和 服务地址 var key = "2T6ftyeUO9Ak8oC8IuWSMKAd"; var mapUrl = "http://192.168.120.158:8195/iserver/services/map_world/rest/maps/世界地图_Day"; //调用权限相关接口 SuperMap.SecurityManager.registerKey(mapUrl, key); //设置地图参数 var map = L.map('iportal_map', { crs: L.CRS.EPSG4326, center: [0, 0], maxZoom: 18, zoom: 2 }); //加载地图 L.supermap.tiledMapLayer(mapUrl, { serverType: SuperMap.ServerType.IPORTAL }).addTo(map); </script> </body> </html>
其中:
- L.map 类:用于初始化地图,添加地图浏览、显示地图中心点坐标、缩放等控件
- L.supermap.tiledMapLayer 类:用于添加 REST 地图服务图层,本示例中使用的地图服务是: http://192.168.120.158:8195/iserver/services/map_world/rest/maps/世界地图_Day
- SuperMap.SecurityManager 类:用于进行安全验证,如本例中使用的密钥 Key(2T6ftyeUO9Ak8oC8IuWSMKAd)
第三步:引用资源文件
将第一步得到的 libs 和 dist 文件夹拷贝到“MyFirst”文件夹下,也可以放在其他位置,这时需要在第二步的代码中修改引用脚本的相对路径。
第四步:使用浏览器运行查看
将“MyFirst”文件夹拷贝到 %SuperMap iPortal_HOME%/webapps 目录下,启动 SuperMap iPortal,在浏览器地址栏中输入:http://192.168.120.135:8190/MyFirst/demo.html,浏览地图数据。
管理密钥(Key)
您可以管理自己添加的密钥(Key),在 iPortal 门户首页,点击“登录”按钮,登录成功后,进入“我的账户”->“我的密钥”,在开发授权页面会显示当前用户添加的所有密钥列表。
- 查看密钥:在密钥列表中,可以查看密钥的名称也即应用的名称、密钥请求参数、密钥的客户端类型、密钥允许访问的服务数量等。
- 删除密钥,支持勾选多个密钥进行批量删除,密钥一旦被删除,该密钥立即失效。
- 编辑密钥,包括修改应用名称、应用类型、允许访问的服务等。