空间数据可视化中的二维/三维数据可视化服务支持分享场景,本文介绍如何分享已创建的场景。

二维/三维数据可视化服务的分享场景功能有两种授权方式:授权登录访问和免登录访问。

前提条件

已根据场景创建设备定位内容,完成了场景的创建。

操作步骤

  1. 物联网平台控制台,左侧导航栏选择数据分析 > 空间数据可视化
  2. 二维数据可视化三维数据可视化页面,单击已创建的场景,进入详情页面。
  3. 在界面右上角单击分享
    • 授权登录访问

      通过授权手机号码分享场景,适合单独使用二维/三维数据可视化服务的场景。


      授权登录
      表 1. 参数说明
      参数 描述
      分享链接 由空间数据可视化服务自动生成的,即将分享的场景链接,被授权的手机号访问该链接查看场景。
      单次登录有效时间 被授权的手机号码用户单次登录场景的有效时间。
      授权手机号 输入需要授权的手机号码,最多分享给10个手机号码。
      被授权的手机号,访问分享链接后需要通过手机号码和短信验证码登录页面。
      手机分享
    • 免登录访问

      该分享方式会生成一个无需登录就能访问的URL,用户通过该URL直接访问已编辑好的二维/三维数据可视化场景,适合需要将二维/三维数据可视化做嵌入集成的用户或企业。


      分享场景
      表 2. 参数说明
      参数 描述
      URL 由空间数据可视化服务自动生成的,即将分享的场景链接。可免登录访问。
      Token URL的Token。该Token是生成访问URL的唯一凭证,请妥善保管,一旦泄露,会造成您已编辑的二维/三维数据可视化场景泄露。单击右侧复制,可复制该Token。
      测试链接 由空间数据可视化服务生,用户使用此链接地址进行免登录访问测试。
      单次登录有效时间 有两种有效时间。
      • 10小时:生成的URL只能使用10小时进行访问,超过该期限后,您需要使用页面上的Token来主动生成新的访问URL。详情请见本文下方Token生成免登录访问URL
      • 永久:生成的URL永久有效,若需要更新URL,请单击右侧的刷新重新生成新的URL。
        注意 永久有效的URL可以一直访问使用,请您自行确认风险。

Token生成免登录访问URL

本小节讲述了生成免登录访问URL的开源算法,并提供部分语言示例。

Token生成免登录访问URL的算法为开源算法,用以下步骤即可生成。
  1. 在二维/三维数据可视化分享窗口中,复制免登录访问URL和Token。
    例如,复制一个如下图所示二维数据可视化场景的URL和Token。
    • URL:https://gis.aliyun-iot-share.com/auth/gis/{hashToken}/test1234567890
    • Token:abc

    token生成
    说明 如果仅测试免登录访问功能,请在测试链接右侧单击复制,可直接在浏览器中访问该二维/三维数据可视化场景。
  2. 对Token进行bcrypt运算,生成midToken。
    对上述二维数据可视化场景示例中的Token:abc进行bcrypt运算后,获得如下返回结果。
    说明 由于bcrypt算法特性,每次进行bcrypt运算后获得的midToken结果都不同。
    $2a$10$td0GQDWPLnE98pRHaFB/n.FYG5979ATZ4uXVPVw7f3omKUFOHtj.K
  3. 对bcrypt运算后的结果(即midToken)进行base64加密,生成hashToken。
    对上一步获得的示例midToken进行base64加密后获得如下结果。
    JDJhJDEwJHRkMEdRRFdQTG5FOThwUkhhRkIvbi5GWUc1OTc5QVRaNHVYVlBWdzdmM29tS1VGT0h0ai5L
  4. 将base64编码后的结果替换进免登录访问URL中的{hashToken}即可生成免登录访问URL。

    您的免登录访问URL格式如下。

    • 二维数据可视化:https://gis.aliyun-iot-share.com/auth/gis/{hashToken}/xxx
    • 三维数据可视化:https://bim.aliyun-iot-share.com/auth/bim/{hashToken}/xxx
    即,将步骤3中获得的结果,替换到步骤1中复制出来的URL中,则获得如下可分享给其他用户的免登录访问链接,单次登录时效为10小时。
    https://gis.aliyun-iot-share.com/auth/gis/JDJhJDEwJHRkMEdRRFdQTG5FOThwUkhhRkIvbi5GWUc1OTc5QVRaNHVYVlBWdzdmM29tS1VGT0h0ai5L/test1234567890

    您只需要在URL的有效期内重复以上步骤,生成新的URL,替换旧的URL即可。

下面用几种语言举例描述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)