日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

分享看板的Token訪問方式

分享數(shù)據(jù)看板時,可使用Token方式進行訪問驗證,該方式通過認證和授權機制,保證了數(shù)據(jù)看板分享過程的安全、高效和靈活。采用Token后,DataV-Board支持使用“攜帶自定義簽名參數(shù)”或“不攜帶自定義簽名參數(shù)”方式訪問數(shù)據(jù)看板。“攜帶自定義簽名參數(shù)”方式可對看板交互時傳遞的參數(shù)進行簽名鑒權,保證看板的URL訪問鏈接不被篡改,從而提高看板數(shù)據(jù)及用戶信息的安全性。

使用流程

  1. 生成Token:在數(shù)據(jù)看板開發(fā)完成后,使用Token驗證的方式發(fā)布數(shù)據(jù)看板,具體請參見發(fā)布數(shù)據(jù)看板image

  2. 請求簽名:參見攜帶自定義簽名參數(shù)的URL計算或者不攜帶自定義簽名參數(shù)的URL計算,計算數(shù)據(jù)看板的URL。

    1. screenID與當前時間(毫秒)拼接起來,并用 |(豎線)分隔開。

    2. (可選)確定需要簽名計算的自定義參數(shù)名,必須符合參數(shù)規(guī)則。

    3. 使用Token通過HMAC-SHA256 base64,對上兩步得到的Token驗證碼進行加密,獲得加密后簽名。

    4. 將時間和加密后的簽名分別命名為_datav_time_datav_signature

    5. 將它們依次放入URLquerystring中。

  3. 發(fā)送請求:使用上一步中計算得到的URL訪問數(shù)據(jù)看板。

  4. 驗證簽名:在訪問過程中,系統(tǒng)會自動進行參數(shù)簽名校驗。校驗成功后,即可訪問到分享的數(shù)據(jù)看板。

    說明

    對于攜帶自定義簽名參數(shù)的數(shù)據(jù)看板,如果當您修改了簽名參數(shù),再次訪問此URL時,訪問會被拒絕。

攜帶自定義簽名參數(shù)的訪問

前提條件

在使用Token自定義參數(shù)簽名校驗前,請確保:

  • 數(shù)據(jù)看板使用Token驗證的方式進行發(fā)布,具體請參見發(fā)布數(shù)據(jù)看板

  • 數(shù)據(jù)看板以GET方式在URL中傳遞參數(shù)(直接在URL后面加參數(shù))。

  • 數(shù)據(jù)看板URL中傳遞的參數(shù)要求不能被篡改。

使用場景

某用戶的系統(tǒng)嵌入了DataV數(shù)據(jù)看板,URL通過Token計算,通過GET方式傳遞用戶的工號給數(shù)據(jù)看板展示相對應的數(shù)據(jù),可以使用https://datav.aliyuncs.com/share/page/xxx?_datav_time=1556022195845&_datav_signature=%2B******%3D&workid=123來訪問數(shù)據(jù)看板。

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

參數(shù)規(guī)則

需要加入簽名的參數(shù),其參數(shù)名需以datav_sign_開頭,后面可以帶任何有效的參數(shù)名字符。由此可得此參數(shù)名的正則表達式為/^datav_sign_.*/

說明

不符合簽名參數(shù)規(guī)則的參數(shù),將不會進行參數(shù)簽名校驗,允許修改參數(shù)值。簽名參數(shù)按升序排序。

攜帶自定義簽名參數(shù)的URL計算

Node.js代碼示例如下。

const crypto = require('crypto');
const querystring = require('querystring');
const signedQueryParamReg = /^datav_sign_.*/;  // 符合此正則表達式的參數(shù)是需要簽名的。

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

const customeParams = {
  datav_sign_no: 123998,  // 此參數(shù)符合命名規(guī)則,將參與參數(shù)校驗
  name: 123               // 此參數(shù)不符合命名規(guī)則,將不參與參數(shù)校驗
};
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/page/${screenID}?${querystring.stringify(queryParams)}`;
console.log(url);

使用以上代碼示例得到的URL為:https://datav.aliyuncs.com/share/page/b92db8e09358c82efca0727b4c538cd4?_datav_time=1556023246894&_datav_signature=GG******%3D&datav_sign_no=123998&name=123。在URL的有效期內,如果修改了datav_sign_no字段的值,鏈接將無法訪問;如果修改了name字段的值,鏈接仍然可以訪問,因為datav_sign_no符合參數(shù)規(guī)則,參與了簽名計算,而name不符合簽名參數(shù)規(guī)則,不會進行簽名計算。

不攜帶自定義簽名參數(shù)的訪問

不攜帶自定義簽名參數(shù)的URL計算

如果您希望不帶自定義簽名參數(shù)方式,獲取URL。請參考以下代碼。

const crypto = require('crypto');
var token = "Ev97wOUSAtJusc3Vsd9O2ngr_vfV****";
var screenID ="14c5448c00ecde02b065c231d165****";
var time = Date.now();
var stringToSign = screenID +'|'+ time;
var signature = crypto.createHmac('sha256', token).update(stringToSign).digest().toString('base64');
var url="http://datav.aliyuncs.com/share/page/"+ screenID +"?_datav_time="+time+"&_datav_signature="+ encodeURIComponent(signature);
package com.company;
import java.security.*;
import java.util.Date;
import javax.crypto.*;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import java.net.URLEncoder;
public class TokenTest {
    public static String getSignedUrl(String screenID, String token){
        Date date = new Date();
        Long time = date.getTime();
        String stringToSign = screenID + "|" + time;
        String signature = HMACSHA256(stringToSign.getBytes(), token.getBytes());
        String url = "http://datav.aliyuncs.com/share/page/"+ screenID +"?_datav_time="+time+"&_datav_signature="+ signature;
        return url;
    }
    /**
     *  使用java原生的摘要實現(xiàn)SHA256加密。
     * @param str加密后的報文。
     * @return
     */
    public static String HMACSHA256(byte[] data, byte[] key)
    {
        try  {
            SecretKeySpec signingKey = new SecretKeySpec(key, "HmacSHA256");
            Mac mac = Mac.getInstance("HmacSHA256");
            mac.init(signingKey);
            return URLEncoder.encode(byte2Base64(mac.doFinal(data)));
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (InvalidKeyException e) {
            e.printStackTrace();
        }
        return null;
    }
    private static String byte2Base64(byte[] bytes){
        return Base64.encodeBase64String(bytes);
    }
    public static void main(String[] args) throws Exception {
        System.out.println(getSignedUrl("screenId", "token"));
    }
}
<?php
  $token = "kBwoX9rFX9v4zbOT0Gjd_wr65DZ****";
  $screenID = "03d1b68faeb09671046d1ef43f58****";
  $time = time()*1000;
  $stringToSign = $screenID.'|'.$time;
  $signature = urlencode(base64_encode(hash_hmac('sha256', $stringToSign, $token, true)));
  $url = "http://datav.aliyuncs.com/share/page/".$screenID."?_datav_time=".$time."&_datav_signature=".$signature;
?>
<iframe width=100% height=100% src="<?=$url?>"/>