空间数据可视化中的二维/三维数据可视化服务支持分享场景,本文介绍如何分享已创建的场景。
二维/三维数据可视化服务的分享场景功能有两种授权方式:授权登录访问和免登录访问。
前提条件
操作步骤
Token生成免登录访问URL
本小节讲述了生成免登录访问URL的开源算法,并提供部分语言示例。
Token生成免登录访问URL的算法为开源算法,用以下步骤即可生成。
- 在二维/三维数据可视化分享窗口中,复制免登录访问URL和Token。
例如,复制一个如下图所示二维数据可视化场景的URL和Token。
- URL:
https://gis.aliyun-iot-share.com/auth/gis/{hashToken}/test1234567890
- Token:
abc
说明 如果仅测试免登录访问功能,请在测试链接右侧单击复制,可直接在浏览器中访问该二维/三维数据可视化场景。 - URL:
- 对Token进行bcrypt运算,生成midToken。
对上述二维数据可视化场景示例中的Token:
abc
进行bcrypt运算后,获得如下返回结果。说明 由于bcrypt算法特性,每次进行bcrypt运算后获得的midToken结果都不同。$2a$10$td0GQDWPLnE98pRHaFB/n.FYG5979ATZ4uXVPVw7f3omKUFOHtj.K
- 对bcrypt运算后的结果(即midToken)进行base64加密,生成hashToken。
对上一步获得的示例midToken进行base64加密后获得如下结果。
JDJhJDEwJHRkMEdRRFdQTG5FOThwUkhhRkIvbi5GWUc1OTc5QVRaNHVYVlBWdzdmM29tS1VGT0h0ai5L
- 将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)