Как получить подписанный файл cookie в aws-sdk-js-v3

Я хочу использовать подписанные файлы cookie для просмотра личного контента, хранящегося на S3, с помощью CloudFront для CDN.

Я не могу понять, какие команды использовать для получения подписанных файлов cookie в aws-sdk-js-v3. Согласно новым документам SDK он должен выглядеть примерно как второй пример кода ниже, но я не могу найти конкретный пакет npm, содержащий нужные мне команды. В версии 2 это был 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");
  }
}

2 ответа

Похоже, они еще не предлагают эту функциональность. Вот проблема с запросом функции github, которую нужно отслеживать: https://github.com/aws/aws-sdk-js-v3/issues/1862 .

Для дальнейшего использования я нашел это https://docs.aws.amazon.com/AWSJavaScriptSDK/v3/latest/modules/_aws_sdk_cloudfront_signer.html .

указывает на то, что библиотека@aws-sdk/cloudfront-signer, который имеет такие методы, какgetSignedCookies()

может быть использован.

Если ссылка должна измениться, вот пример кода из ссылки:

      const { getSignedCookies } = require("@aws-sdk/cloudfront-signer"); // CJS

const cloudfrontDistributionDomain = "https://d111111abcdef8.cloudfront.net";
const s3ObjectKey = "private-content/private.jpeg";
const url = `${cloudfrontDistributionDomain}/${s3ObjectKey}`;
const privateKey = "CONTENTS-OF-PRIVATE-KEY";
const keyPairId = "PUBLIC-KEY-ID-OF-CLOUDFRONT-KEY-PAIR";
const dateLessThan = "2022-01-01";

const cookies = getSignedCookies({
  url,
  keyPairId,
  dateLessThan,
  privateKey,
});
Другие вопросы по тегам