分享场景

轨迹分析支持将创建的场景分享给其他用户,用于授权第三方查看或控制您的设备状态。本文介绍如何分享已创建的场景。

前提条件

已创建场景,具体请参见:创建场景

操作步骤

  1. 登录物联网平台控制台,在左侧导航栏选择增值服务 > 设备位置服务

  2. 单击IoT 设备位置服务页面,单击轨迹分析

  3. 选择已创建的场景,在地图右上角单击分享,并设置参数。分享场景

    参数

    说明

    测试链接

    生成一个无需登录就能访问场景的链接,使用此链接进行免登录访问测试。

    说明

    如果仅测试免登录访问功能,单击右侧的复制,可直接在浏览器中访问该场景。

    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可以一直访问使用,请您确认风险后谨慎使用。

  4. 单击确定,使分享生效。

Token生成免登录URL

本节介绍生成免登录URL的开源算法步骤,并提供部分语言示例。

  1. 在打开的分享对话框中,复制URLToken

    示例:

    • URL:https://gis.aliyun-iot-share.com/auth/gis/{hashToken}/9f36af685****7efaadbd8352f5233a1

    • Token:hSc3****

    复制链接
  2. 对Token进行bcrypt运算,生成midToken。

    示例中的Token:hSc3****进行bcrypt运算后,获得如下返回结果。

    $2a$10$td0GQDWPLnE98pRHaFB/n.FYG5****TZ4uXVPVw7f3omKUFOHtj.K

    说明

    由于bcrypt算法特性,每次进行bcrypt运算后获得的midToken结果都不同。

  3. 对bcrypt运算后的结果(即midToken)进行Base64加密,生成hashToken。

    对上一步获得的示例midToken进行Base64加密后获得如下结果。

    JDJhJDEwJHRkMEdRRFdQTG5FOThwUkhhRkIvbi5GWUc1OTc5QVRaNHVYVlBWdzdmM29tS1VGT0h0ai5L

  4. 将步骤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)