fix: 修复 CDN API 签名算法
This commit is contained in:
@@ -365,17 +365,19 @@ async function uploadBuildDir() {
|
|||||||
/**
|
/**
|
||||||
* 生成腾讯云 TC3-HMAC-SHA256 签名
|
* 生成腾讯云 TC3-HMAC-SHA256 签名
|
||||||
*/
|
*/
|
||||||
function generateTC3Signature(secretId, secretKey, service, payload) {
|
function generateTC3Signature(secretId, secretKey, service, action, payload) {
|
||||||
const timestamp = Math.floor(Date.now() / 1000);
|
const timestamp = Math.floor(Date.now() / 1000);
|
||||||
const date = new Date(timestamp * 1000).toISOString().slice(0, 10);
|
const date = new Date(timestamp * 1000).toISOString().slice(0, 10);
|
||||||
|
const host = `${service}.tencentcloudapi.com`;
|
||||||
|
|
||||||
// 1. 拼接规范请求串
|
// 1. 拼接规范请求串
|
||||||
const httpRequestMethod = 'POST';
|
const httpRequestMethod = 'POST';
|
||||||
const canonicalUri = '/';
|
const canonicalUri = '/';
|
||||||
const canonicalQueryString = '';
|
const canonicalQueryString = '';
|
||||||
const hashedPayload = crypto.createHash('sha256').update(payload).digest('hex');
|
const hashedPayload = crypto.createHash('sha256').update(payload).digest('hex');
|
||||||
const canonicalHeaders = `content-type:application/json; charset=utf-8\nhost:cdn.tencentcloudapi.com\nx-tc-action:purgeUrlsCache\n`;
|
// 只签名 content-type 和 host(按字母顺序)
|
||||||
const signedHeaders = 'content-type;host;x-tc-action';
|
const canonicalHeaders = `content-type:application/json; charset=utf-8\nhost:${host}\n`;
|
||||||
|
const signedHeaders = 'content-type;host';
|
||||||
const canonicalRequest = `${httpRequestMethod}\n${canonicalUri}\n${canonicalQueryString}\n${canonicalHeaders}\n${signedHeaders}\n${hashedPayload}`;
|
const canonicalRequest = `${httpRequestMethod}\n${canonicalUri}\n${canonicalQueryString}\n${canonicalHeaders}\n${signedHeaders}\n${hashedPayload}`;
|
||||||
|
|
||||||
// 2. 拼接待签名字符串
|
// 2. 拼接待签名字符串
|
||||||
@@ -402,7 +404,7 @@ function generateTC3Signature(secretId, secretKey, service, payload) {
|
|||||||
function callCdnApi(secretId, secretKey, action, params) {
|
function callCdnApi(secretId, secretKey, action, params) {
|
||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
const payload = JSON.stringify(params);
|
const payload = JSON.stringify(params);
|
||||||
const { authorization, timestamp } = generateTC3Signature(secretId, secretKey, 'cdn', payload);
|
const { authorization, timestamp } = generateTC3Signature(secretId, secretKey, 'cdn', action, payload);
|
||||||
|
|
||||||
const options = {
|
const options = {
|
||||||
hostname: 'cdn.tencentcloudapi.com',
|
hostname: 'cdn.tencentcloudapi.com',
|
||||||
@@ -415,6 +417,7 @@ function callCdnApi(secretId, secretKey, action, params) {
|
|||||||
'X-TC-Action': action,
|
'X-TC-Action': action,
|
||||||
'X-TC-Version': '2018-06-06',
|
'X-TC-Version': '2018-06-06',
|
||||||
'X-TC-Timestamp': timestamp.toString(),
|
'X-TC-Timestamp': timestamp.toString(),
|
||||||
|
'X-TC-Region': '',
|
||||||
'Authorization': authorization,
|
'Authorization': authorization,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user