本文介紹在發布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_
開頭,后面可以帶任何有效的參數名字符。由此可得此參數名的正則表達式為/^datav_sign_.*/
。
不符合簽名參數規則的參數,將不會進行參數簽名校驗,允許修改參數值。簽名參數按升序排序。
帶簽名參數的URL計算
Node.js代碼示例如下。
const crypto = require('crypto');
const querystring = require('querystring');
const signedQueryParamReg = /^datav_sign_.*/; // 符合此正則表達式的參數是需要簽名的。
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
不符合簽名參數規則,不會進行簽名計算。
使用流程
確定需要簽名計算的參數名(即不允許被篡改的參數)。
在數據可視化大屏開發完成后,使用Token驗證的方式發布數據可視化大屏,具體請參見發布PC端可視化應用。
參見帶簽名參數的URL計算,計算數據可視化大屏的URL。
使用上一步中計算得到的URL訪問數據可視化大屏,在訪問過程中,系統會自動進行參數簽名校驗。
如果參數簽名校驗功能正常,當您修改了簽名參數,再次訪問此URL時,訪問會被拒絕。