Я работал над этим около недели. Я создал облачный дистрибутив для своего сегмента 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
Проблема с подписанным URL-адресом Amazon Cloudfront ⇐ C#
Место общения программистов C#
-
Anonymous
1734280932
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}");
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79282731/amazon-cloudfront-signed-url-issue[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия