このトピックでは、パブリッシュDataVダッシュボードで署名検証用のトークンパラメーターを使用する方法について説明します。 この検証方法では、プロジェクトでのデータ表示に渡されるパラメーターに対して署名認証を実行できます。 これにより、公開されたプロジェクトのURLのパラメーターが改ざんされるのを防ぎ、プロジェクトデータとユーザーのプライバシー情報のセキュリティを確保します。
前提条件
この方法を使用する前に、次のことを確認してください。
データの視覚化screenUse token authenticationFor more information、「PCでの視覚化されたアプリケーションの公開」をご参照ください。
データ視覚化ダッシュボードでは、Getを使用してURLのパラメーターを渡します (URLの直後にパラメーターを追加します) 。
データ可視化画面のURLで渡されたパラメーターは、改ざんされてはなりません。
シナリオ
次の例では、この検証方法の背景情報について説明します。
ユーザーのシステムにはDataV大画面が埋め込まれ、URLはトークンで計算され、ユーザーのジョブ番号はGetによってデータ視覚化大画面に渡され、対応するデータが表示され、データ視覚化大画面には https://datav.aliyuncs.com/share/xxx?_datav_time=1556022195845&_datav_signature=%2BDZFj3QDIla%2F00fBZLdJMgk2Z1Ocs9MLL1 ****** % 3D&workid=123
でアクセスできます。
workid
(ジョブID) は、データ可視化画面で渡されるパラメータであり、改ざんされる可能性があります。 たとえば、ジョブ番号が123の従業員がURLを https://datav.aliyuncs.com/share/xxx?_datav_time=1556022195845&_datav_signature=%2BDZFj3QDIla%2F00fBZLdJMgk2Z1Ocs9MLL1 ****** % 3D&workid=124
に変更した場合、ジョブ番号が124の従業員の情報を確認できます。 渡されたパラメーターが改ざんされないようにするには、署名認証を有効にする必要があります。 署名認証を有効にした後、URLで渡されたパラメーターが予期せず変更された場合、新しいURLを使用してプロジェクトを表示することはできません。
パラメータールール
署名するパラメーターの名前は、datav_sign_
で始まる有効なパラメーター名である必要があります。 このパラメーター名の正規表現は /^ datav_sign_.*/
です。
命名規則を満たさないパラメーターでは、署名認証はサポートされません。 ただし、パラメータ値は変更できます。 署名パラメータは昇順でソートされます。
署名パラメータを持つURL
サンプルNode.jsコードの例を次に示します。
const crypto = require('crypto');
const querystring = require('querystring');
const signedQueryParamReg = /^ datav_sign_.*/; // Parameters that conform to this regular expression need to be signed.
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
はパラメータールールに準拠しており、署名の計算に関与しているため、リンクにアクセスできます。 ただし、名前
は署名パラメータールールに準拠せず、署名計算を実行しません。
手順
署名する必要があるパラメーターの名前を決定します。 これらのパラメーターは、渡された後は改ざんできません。
データ視覚化ダッシュボードが開発されたら、トークンを使用しますauthenticationPublish a data visualization dashboard. 詳細については、「PCでのビジュアライゼーションアプリケーションの公開」をご参照ください。
データ視覚化ダッシュボードのURLを計算します。 詳細については、「署名パラメーターを使用したURLの計算」をご参照ください。
前の手順で計算したURLを使用して、データ視覚化画面にアクセスします。 アクセス中、システムはパラメータ署名を自動的に検証します。
検証が成功し、URLの署名パラメーターを変更すると、次回URLにアクセスするときにアクセスが拒否されます。