我想使用签名的cookies来查看存储在CDN的CloudFront上的私人内容。
我不知道在aws-sdk-js-v3中使用哪些命令来获取签名的cookie。根据新的SDK文档,它应该类似于下面的第二个代码示例,但我找不到包含我需要的命令的特定npm包。在v2中它是"getSignedCookie“,但我不知道它被更新成了什么。
老式(v2)版本:
import AWS from "aws-sdk";
const CFSigner = new AWS.CloudFront.Signer(cfPublicKeyId, cfPrivateKey);
const policy = JSON.stringify({
Statement: [
{
Resource: `https://${cfDomain}/images/*`,
Condition: {
DateLessThan: {
"AWS:EpochTime": expireTime,
},
},
},
],
});
const myCookie = CFSigner.getSignedCookie({ policy });尝试使用v3 SDK
import {
CloudFrontClient,
CloudFrontClientConfig,
} from "@aws-sdk/client-cloudfront";
import { ICantFindAnAppropriateCommandToSignCookies } from "ICantFindAnAppropriateCommandToSignCookies";
async function signMyCookies() {
const config: CloudFrontClientConfig = {
apiVersion: "2015-12-08",
credentials: {
accessKeyId: process.env.SC_ADMIN_ACCESS_KEY_ID,
secretAccessKey: process.env.SC_ADMIN_SECRET_ACCESS_KEY,
},
region: "us-east-01",
};
const cfClient = new CloudFrontClient(config);
const cfDomain = process.env.CLOUDFRONT_DOMAIN;
const twoDays = 2 * 24 * 60 * 60 * 1000;
const expireTime = Math.floor((Date.now() + twoDays) / 1000);
const params = {
policy: JSON.stringify({
Statement: [
{
Resource: `https://${cfDomain}/images/*`,
Condition: {
DateLessThan: {
"AWS:EpochTime": expireTime,
},
},
},
],
}),
};
const command = new ICantFindAnAppropriateCommandToSignCookies(params);
try {
const data = await cfClient.send(command);
console.log("SUCCESS!", data);
} catch (error) {
console.error("OH NO ERROR GETTING SIGNED COOKIE", error);
} finally {
console.log("PROCESS COMPLETE");
}
}发布于 2021-06-24 22:50:16
看起来他们还没有提供这个功能。下面是github的特性请求问题:https://github.com/aws/aws-sdk-js-v3/issues/1862。
https://stackoverflow.com/questions/67292649
复制相似问题