Проблема с подписанным URL-адресом Amazon CloudfrontC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с подписанным URL-адресом Amazon Cloudfront

Сообщение Anonymous »

Я работал над этим около недели. Я создал облачный дистрибутив для своего сегмента s3, убедился, что он имеет надлежащий контроль доступа к источнику (OAC) и что правильная политика сегмента предоставляет доступ OAC, убедился, что для моей группы ключей установлено ограничение доступа просмотра дистрибутива, и что группа ключей содержит правильный открытый ключ, гарантировал, что в моем коде используется правильный путь к секретному ключу, и гарантировал, что используется правильный идентификатор пары ключей. Есть идеи, почему этот код создает подписанный URL-адрес с недействительным/неизвестным ключом и ошибкой 403? Кроме того, я не знаю, поможет ли это, но я добавил политику CORS (может быть, она мне не нужна?), а затем убедился, что мое поведение при распространении включает не только заголовки CORS, но и строки запроса. Я также включил файлы cookie (возможно, в этом нет необходимости, но мне не терпится заставить это работать!)
using Amazon.CloudFront;
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
using Newtonsoft.Json;

public class CloudFrontSignedUrlGenerator
{
public static string GenerateSignedUrl(string distributionDomain, string filePath, string privateKeyFilePath, string keyPairId, DateTime expirationDate)
{
string resourceUrl = $"https://{distributionDomain}/{filePath}";

// Create the policy document
var policy = new
{
Statement = new[]
{
new
{
Resource = resourceUrl,
Condition = new
{
DateLessThan = new { EpochTime = ((DateTimeOffset)expirationDate).ToUnixTimeSeconds() }
}
}
}
};

string policyJson = JsonConvert.SerializeObject(policy);

// Load the private key
string privateKey = File.ReadAllText(privateKeyFilePath);

// Sign the policy
string signature = SignPolicyWithRSA(policyJson, privateKey);

// Construct signed URL
return $"{resourceUrl}?Policy={Uri.EscapeDataString(policyJson)}&Signature={signature}&Key-Pair-Id={keyPairId}";
}

private static string SignPolicyWithRSA(string policyJson, string privateKey)
{
using (RSA rsa = RSA.Create())
{
rsa.ImportFromPem(privateKey);
byte[] data = Encoding.UTF8.GetBytes(policyJson);
byte[] signature = rsa.SignData(data, HashAlgorithmName.SHA1, RSASignaturePadding.Pkcs1);

// Make Base64 signature URL-safe
return Convert.ToBase64String(signature)
.Replace('+', '-')
.Replace('/', '_')
.Replace("=", "");
}
}

public static void Main()
{
string distributionDomain = "XXXXXXXXXXXXXX.cloudfront.net";
string filePath = "WindowsForm_1/20241205_WFASample.mp4";
string privateKeyFilePath = "C:\\Users\\USERNAME\\OneDrive\\Coding\\AmazonWebServices\\KeyPair\\PrivateKey\\pk-XXXXXXXXXXXXXXXXXXXX.pem";
string keyPairId = "XXXXXXXXXXXXXXXXXXXX";
DateTime expirationDate = DateTime.UtcNow.AddHours(1);

string signedUrl = GenerateSignedUrl(distributionDomain, filePath, privateKeyFilePath, keyPairId, expirationDate);

Console.WriteLine($"Generated Signed URL: {signedUrl}");
}
}


Подробнее здесь: https://stackoverflow.com/questions/792 ... -url-issue
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Воспроизведение m3u8 из Amazon S3 + CloudFront с подписанным URL-адресом в Android
    Anonymous » » в форуме Android
    0 Ответы
    21 Просмотры
    Последнее сообщение Anonymous
  • Создание подписанных URL -адресов для Amazon CloudFront
    Anonymous » » в форуме Python
    0 Ответы
    1 Просмотры
    Последнее сообщение Anonymous
  • Amazon CloudFront не работает в React Native
    Anonymous » » в форуме Android
    0 Ответы
    39 Просмотры
    Последнее сообщение Anonymous
  • Amazon CloudFront не работает в React Native
    Anonymous » » в форуме IOS
    0 Ответы
    13 Просмотры
    Последнее сообщение Anonymous
  • Правильная загрузка файлов с S3 по заранее подписанным URL-адресам.
    Anonymous » » в форуме C#
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»