全部產品
Search
文件中心

DataV:DataV分享頁Token參數簽名校正

更新時間:Jun 19, 2024

本文介紹在發布DataV大屏如何使用Token參數簽名校正。通過Token參數簽名校正功能,您可以對大屏互動時傳遞的參數進行簽名鑒權,保證大屏的URL訪問連結的參數不能被篡改,從而提高大屏資料以及使用者資訊的安全性。

前提條件

在使用Token參數簽名校正前,請確保:

  • 資料視覺效果大屏使用Token驗證的方式進行發布,具體請參見發布PC端可視化應用

  • 資料視覺效果大屏以Get的方式在URL中傳遞參數(直接在URL後面加參數)。

  • 資料視覺效果大屏URL中傳遞的參數要求不能被篡改。

使用情境

下文以一個樣本說明Token參數簽名校正的使用背景。

某使用者的系統嵌入了DataV大屏,URL通過Token計算,通過Get方式傳遞使用者的工號給資料視覺效果大屏展示相對應的資料,可以使用https://datav.aliyuncs.com/share/xxx?_datav_time=1556022195845&_datav_signature=%2BDZFj3QDIla%2F00fBZLdJMgk2Z1Ocs9MLL1******%3D&workid=123來訪問資料視覺效果大屏。

其中workid(工號)為資料視覺效果大屏傳遞的參數,存在被篡改的可能。比如工號為123的員工將URL改成https://datav.aliyuncs.com/share/xxx?_datav_time=1556022195845&_datav_signature=%2BDZFj3QDIla%2F00fBZLdJMgk2Z1Ocs9MLL1******%3D&workid=124,就可以看到工號為124的員工的資料。因此需要對使用者傳遞的參數進行簽名鑒權,保證計算得到的URL的參數不能被更改,如果私自更改了傳參,頁面將無法訪問。

參數規則

需要加入簽名的參數,其參數名需以datav_sign_開頭,後面可以帶任何有效參數名字元。由此可得此參數名的Regex為/^datav_sign_.*/

說明

不符合簽名參數規則的參數,將不會進行參數簽名校正,允許修改參數值。簽名參數按升序排序。

帶簽名參數的URL計算

Node.js程式碼範例如下。

const crypto = require('crypto');
const querystring = require('querystring');
const signedQueryParamReg = /^datav_sign_.*/;  // 符合此Regex的參數是需要簽名的。

const token = "93TWnmeBtxxxxxxxxxx3thGyAgzennsS";
const screenID ="b92xxxxxxxxxxxxxxxxxx27b4c538cd4";
const time = Date.now();

const customeParams = {
  datav_sign_no: 123998,
  name: 123
};
let signParamsStr = Object.keys(customeParams)
  .filter(paramName => customeParams[paramName] && signedQueryParamReg.test(paramName))
  .sort()
  .map(param => `${param}=${customeParams[param]}`)
  .join('&');
let stringToSign = [screenID, time];
signParamsStr && stringToSign.push(signParamsStr);
stringToSign = stringToSign.join('|');
let signature = crypto.createHmac('sha256', token).update(stringToSign).digest().toString('base64');
let queryParams = {
  _datav_time: time,
  _datav_signature: signature
};

Object.keys(customeParams).forEach(paramName => {
  queryParams[paramName] = customeParams[paramName];
});

let url = `https://datav.aliyuncs.com/share/${screenID}?${querystring.stringify(queryParams)}`;
console.log(url);

使用以上程式碼範例得到的URL為:https://datav.aliyuncs.com/share/b92db8e09358c82efca0727b4c538cd4?_datav_time=1556023246894&_datav_signature=GGSbvxlemUeBoRVco8JgrJVWRcmao7NuRYt2O******%3D&datav_sign_no=123998&name=123。在URL的有效期間內,如果修改了datav_sign_no欄位的值,連結將無法訪問;如果修改了name欄位的值,連結仍然可以訪問,因為datav_sign_no符合參數規則,參與了簽名計算,而name不符合簽名參數規則,不會進行簽名計算。

使用流程

  1. 確定需要簽名計算的參數名(即不允許被篡改的參數)。

  2. 在資料視覺效果大屏開發完成後,使用Token驗證的方式發布資料視覺效果大屏,具體請參見發布PC端可視化應用

  3. 參見帶簽名參數的URL計算,計算資料視覺效果大屏的URL。

  4. 使用上一步中計算得到的URL訪問資料視覺效果大屏,在訪問過程中,系統會自動進行參數簽名校正。

    如果參數簽名校正功能正常,當您修改了簽名參數,再次訪問此URL時,訪問會被拒絕。