轨迹分析支持将创建的场景分享给其他用户,用于授权第三方查看或控制您的设备状态。本文介绍如何分享已创建的场景。
前提条件
已创建场景,具体请参见:创建场景。
操作步骤
登录物联网平台控制台,在左侧导航栏选择增值服务 > 设备位置服务 。
单击IoT 设备位置服务页面,单击轨迹分析。
选择已创建的场景,在地图右上角单击分享,并设置参数。
参数
说明
测试链接
生成一个无需登录就能访问场景的链接,使用此链接进行免登录访问测试。
说明如果仅测试免登录访问功能,单击右侧的复制,可直接在浏览器中访问该场景。
URL
需要分享的场景的链接,可以免登录访问。该URL由物联网平台生成,格式为
https://gis.aliyun-iot-share.com/auth/gis/{hashToken}/9f36af685****7efaadbd8352f5233a1
,其中9f36af685****7efaadbd8352f5233a1
随URL生成。说明URL中的
{hashToken}
需要替换后才能进行免登录访问,具体方法,请参见Token生成免登录URL。Token
URL的Token。该Token是生成URL的唯一凭证,请妥善保管,一旦泄露,会造成您已创建的场景泄露。
单次登录有效时间
包括两种有效时间。
10小时:超过10小时后,登录失效。
永久:免登录URL永久有效。
注意永久有效的URL可以一直访问使用,请您确认风险后谨慎使用。
单击确定,使分享生效。
Token生成免登录URL
本节介绍生成免登录URL的开源算法步骤,并提供部分语言示例。
在打开的分享对话框中,复制URL和Token。
示例:
URL:
https://gis.aliyun-iot-share.com/auth/gis/{hashToken}/9f36af685****7efaadbd8352f5233a1
Token:
hSc3****
对Token进行bcrypt运算,生成midToken。
示例中的Token:
hSc3****
进行bcrypt运算后,获得如下返回结果。$2a$10$td0GQDWPLnE98pRHaFB/n.FYG5****TZ4uXVPVw7f3omKUFOHtj.K
说明由于bcrypt算法特性,每次进行bcrypt运算后获得的midToken结果都不同。
对bcrypt运算后的结果(即midToken)进行Base64加密,生成hashToken。
对上一步获得的示例midToken进行Base64加密后获得如下结果。
JDJhJDEwJHRkMEdRRFdQTG5FOThwUkhhRkIvbi5GWUc1OTc5QVRaNHVYVlBWdzdmM29tS1VGT0h0ai5L
将步骤3中获取的加密结果,替换到步骤1中URL的{hashToken},生成免登录URL。
替换后的免登录URL:
https://gis.aliyun-iot-share.com/auth/gis/JDJhJDEwJHRkMEdRRFdQTG5FOThwUkhhRkIvbi5GWUc1OTc5QVRaNHVYVlBWdzdmM29tS1VGT0h0ai5L/9f36af685****7efaadbd8352f5233a1
说明如果登录失效或者需要更新永久登录链接,您只需获取新的Token,重复以上步骤,生成新的hashToken进行替换即可。
下面用几种语言举例描述Token生成免登录URL的过程。
Java实现
import org.apache.commons.codec.binary.Base64; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; public class TokenUtil { private static final BCryptPasswordEncoder encoder = new BCryptPasswordEncoder(); public static String encodeBase64(String encodedStr) { byte[] debytes = Base64.encodeBase64(encodedStr.getBytes()); return new String(debytes); } public static String encodeBCrypt(String token){ return encoder.encode(token); } public static void main(String[] args) { String token = "123456"; //页面上的token String midToken = TokenUtil.encodeBCrypt(token);//生成中间token String hashToken = TokenUtil.encodeBase64(midToken); //生成hashToken String URL = "https://gis.aliyun-iot-share.com/auth/gis/" + hashToken + "/xxx"; System.out.println("您的分享url为: " + URL); } }
Node.js实现
var bcrypt = require('bcryptjs'); const saltRounds = 10; const salt = bcrypt.genSaltSync(saltRounds); const token = "123456" //页面上的token const midToken = bcrypt.hashSync(token, salt);//生成中间token const midTokenBuf = new Buffer(midToken); const hashToken = midTokenBuf.toString('base64');//生成hashToken const url = "https://gis.aliyun-iot-share.com/auth/gis/" + hashToken + "/xxx"; console.info("您的分享url为: " + url)
Python实现 (Python 3.0版本)
# coding=utf-8 import bcrypt import base64 if __name__ == '__main__': # Program start from here token = b"123456" # 页面上的token midToken = bcrypt.hashpw(token, bcrypt.gensalt(prefix=b"2a")) # 中间token hashToken = base64.b64encode(midToken).decode()#生成hashToken url = "https://gis.aliyun-iot-share.com/auth/gis/" + hashToken + "/xxx" print ("您的分享url为: " + url)