node.js - 缺少 Cloudfront 提供的错误密钥对 ID
问题描述
我已经尝试了文档中描述的每一种方式,并且我正在尝试使用签名的 cookie 来提供私人内容。我设置cookie的方式如下。
function setCloudFrontSignedCookie(res) {
const AWS = require("aws-sdk");
const privateKey = Buffer.from(process.env.PRIVATE_KEY, "base64");
const publicKey = Buffer.from(process.env.PUBLIC_KEY, "base64");
const cloudFront = new AWS.CloudFront.Signer(publicKey, privateKey);
const policy = JSON.stringify({
Statement: [
{
Resource: "http*://du1jzqmqkepz6.cloudfront.net/2021-04-01T15-52-51.085Z-slider5.jpg", // http* => http and https
Condition: {
DateLessThan: {
"AWS:EpochTime":
Math.floor(new Date().getTime() / 1000) + 60 * 60 * 1, // Current Time in UTC + time in seconds, (60 * 60 * 1 = 1 hour)
},
},
},
],
});
const cookie = cloudFront.getSignedCookie({
policy,
});
console.log(cookie);
res.cookie('CloudFront-Key-Pair-Id', cookie['CloudFront-Key-Pair-Id'], { httpOnly: true });
res.cookie('CloudFront-Policy', cookie['CloudFront-Policy'], { httpOnly: true });
res.cookie('CloudFront-Signature', cookie['CloudFront-Signature'], { httpOnly: true });
return true;
}
它返回的错误是
<Error>
<Code>MissingKey</Code>
<Message>Missing Key-Pair-Id query parameter or cookie value</Message>
</Error>
我也用邮递员和 Axios 试过。请如果有人可以帮助我。
解决方案
推荐阅读
- sql - 在 openquery 中将表作为参数传递
- scala - 无法在 spark.sql 中循环 hive sql 查询
- postgresql - 为什么 SQLAlchemy 不反映非公共模式中的表?
- ipywidgets - ipywidgets:最小化按钮宽度以仅显示图标?
- php - Symfony 字段表单在 Ajax 之后未提交
- css - 使用@font-face 的大卡特尔自定义字体不起作用
- javascript - 提交按钮不起作用,如何使它起作用?(描述中提供的代码)
- security - 在 Salesforce 中找不到重置安全令牌选项
- java - 在 java spark 中从 REST API 读取 csv
- javascript - 如何检查两个数字是否具有相同的值并将它们存储在 JavaScript 中的 Object 中?