O recurso Token parameter for signature verification permite assinar parâmetros de URL transmitidos a um projeto DataV publicado. Parâmetros assinados não podem ser adulterados, o que protege os dados do projeto e a privacidade dos usuários.
Pré-requisitos
Antes de usar este método, certifique-se de que:
A tela de visualização de dados usa autenticação por token. Para mais informações, consulte Publicar uma aplicação visualizada em um PC.
O painel usa o método GET para transmitir parâmetros na URL.
Os parâmetros da URL devem estar protegidos contra adulteração.
Cenários
O exemplo a seguir ilustra quando e por que usar a verificação de assinatura de parâmetros de token.
Suponha que um painel do DataV esteja incorporado ao sistema de um usuário. A URL é gerada com um token e o número funcional do usuário é transmitido como parâmetro GET para que o painel exiba os dados correspondentes. A URL resultante tem o seguinte formato: https://datav.aliyuncs.com/share/xxx?_datav_time=1556022195845&_datav_signature=%2BDZFj3QDIla%2F00fBZLdJMgk2Z1Ocs9MLL1******%3D&workid=123.
O parâmetro workid (ID do trabalho) pode ser adulterado. Por exemplo, um funcionário com o número funcional 123 poderia alterar a URL para https://datav.aliyuncs.com/share/xxx?_datav_time=1556022195845&_datav_signature=%2BDZFj3QDIla%2F00fBZLdJMgk2Z1Ocs9MLL1******%3D&workid=124 para visualizar os dados do funcionário 124. Para evitar isso, ative a autenticação por assinatura. Após a ativação, qualquer modificação nos parâmetros assinados na URL invalida o link.
Regras de parâmetros
Um parâmetro só entra no cálculo da assinatura se o nome começar com datav_sign_ (correspondente à expressão regular /^datav_sign_.*/).
Parâmetros fora dessa convenção de nomenclatura não são assinados e seus valores podem ser alterados livremente. Os parâmetros de assinatura são classificados em ordem crescente.
URL com parâmetros de assinatura
O código de exemplo Node.js a seguir gera uma URL assinada:
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);
O código anterior produz uma URL como: https://datav.aliyuncs.com/share/b92db8e09358c82efca0727b4c538cd4?_datav_time=1556023246894&_datav_signature=GGSbvxlemUeBoRVco8JgrJVWRcmao7NuRYt2O******%3D&datav_sign_no=123998&name=123. Enquanto a URL for válida, modificar o valor de datav_sign_no torna o link inacessível, pois esse parâmetro segue as regras de parâmetros e está incluído na assinatura. No entanto, modificar name não afeta o acesso, porque name não corresponde à convenção de nomenclatura e não é assinado.
Procedimento
Defina os nomes dos parâmetros que devem ser assinados. Esses parâmetros não podem ser adulterados após a transmissão.
Após desenvolver o painel de visualização de dados, publique-o com autenticação por token. Para mais informações, consulte Publicar uma aplicação de visualização em um PC.
Calcule a URL do painel de visualização de dados. Para mais informações, consulte Calcular a URL com parâmetros de assinatura.
-
Use a URL calculada na etapa anterior para acessar a tela de visualização de dados. O sistema verifica automaticamente a assinatura dos parâmetros durante o acesso.
Se a verificação for bem-sucedida e você alterar os parâmetros de assinatura na URL, o acesso será negado na próxima tentativa.