Node.js 从cloudfront获取缺少的密钥对Id查询参数或cookie值错误

Node.js 从cloudfront获取缺少的密钥对Id查询参数或cookie值错误,node.js,amazon-cloudfront,amazon-signed-cookie,Node.js,Amazon Cloudfront,Amazon Signed Cookie,使用cloudfront使用签名cookie从s3 bucket提供私有内容。 我能够生成cookie,但当我请求资源时,我会从node.js甚至任何客户端/浏览器/邮递员处得到缺少的密钥对Id查询参数或cookie值错误 const cloudFront = new AWS.CloudFront.Signer( fs.readFileSync('./rsa-APKAIQSVJ2R3T6PYTOUQ.pem', 'utf8'), fs.readFileSync('./pk-APKAIQS

使用cloudfront使用签名cookie从s3 bucket提供私有内容。 我能够生成cookie,但当我请求资源时,我会从node.js甚至任何客户端/浏览器/邮递员处得到缺少的密钥对Id查询参数或cookie值错误

const cloudFront = new AWS.CloudFront.Signer(
  fs.readFileSync('./rsa-APKAIQSVJ2R3T6PYTOUQ.pem', 'utf8'),
  fs.readFileSync('./pk-APKAIQSVJ2R3T6PYTOUQ.pem', 'utf8')
);

const policy = JSON.stringify({
  Statement: [{
    Resource: 'http*://d2q89b5pewg0ry.cloudfront.net/images/',
    Condition: {
      DateLessThan: {
        'AWS:EpochTime': Math.floor(new Date().getTime() / 1000) + 60 * 60 * 3
      }
    },
  }]
});

const cookie = cloudFront.getSignedCookie({
  policy: policy
});

let cookieString = '';
for(var cookieKey in cookie)
{
  cookieString += cookieKey + '=' + cookie[cookieKey] + ";";
}
return axios.get('https://d2q89b5pewg0ry.cloudfront.net/images/hikup.jpg',{
  headers: {
    Cookie: cookieString
  }
}).then((response) => {
  return response;
}).catch((error) => {
  return error;
});

您没有使用完整构造函数,请检查以下内容:

Cookie应具有3个键及其值:

CloudFront-Expires
CloudFront-Signature
CloudFront-Key-Pair-Id
在发出请求时,还需要添加cookie/key CloudFront密钥对Id=APKAIQSVJ2R3T6PYTOUQ


CloudFront密钥对Id不是公钥,它只是Id(如访问密钥Id),因此CloudFront可以看到解密签名所需的公钥。CloudFront上最多可以有2个密钥处于活动状态,您可以使用私钥和公钥创建签名,当CloudFront收到请求时,它会检查CloudFront密钥对Id,以了解应该使用哪个公钥,因此故事结束,CloudFront密钥对Id是您登录AWS控制台并转到安全凭据并单击CloudFront密钥对时的Id,您将看到一个访问密钥Id,这是您需要定义的Id。(与文件名相同)

生成的cookie与您提到的3个键值对相同,但仍然存在错误,对于getSignedCookie方法,回调不是强制性的。这就是我正在做的,迭代所有3个cookie(键值)然后发送请求是否可以提供生成的cookie示例?CloudFront密钥对Id:“MIIBIjANBgkqhkiG9w0BAQEFAAOC…”CloudFront策略:“eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlI…”