すべてのプロダクト
Search
ドキュメントセンター

DataV:トークンのデジタル署名付きパラメータの妥当性確認

最終更新日:Jul 16, 2024

このトピックでは、パブリッシュ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パラメータールールに準拠しており、署名の計算に関与しているため、リンクにアクセスできます。 ただし、名前は署名パラメータールールに準拠せず、署名計算を実行しません。

手順

  1. 署名する必要があるパラメーターの名前を決定します。 これらのパラメーターは、渡された後は改ざんできません。

  2. データ視覚化ダッシュボードが開発されたら、トークンを使用しますauthenticationPublish a data visualization dashboard. 詳細については、「PCでのビジュアライゼーションアプリケーションの公開」をご参照ください。

  3. データ視覚化ダッシュボードのURLを計算します。 詳細については、「署名パラメーターを使用したURLの計算」をご参照ください。

  4. 前の手順で計算したURLを使用して、データ視覚化画面にアクセスします。 アクセス中、システムはパラメータ署名を自動的に検証します。

    検証が成功し、URLの署名パラメーターを変更すると、次回URLにアクセスするときにアクセスが拒否されます。