如何使用 C# 从 CloudFront 获取已签名的 URL?
How do I use C# to get a signed URL from CloudFront?
有几个类似的问题,但没有一个完全相同:
我们有一个带有 CloudFront 的 S3 存储桶,配置为使用已签名的URLs。我可以使用命令行生成签名的 URL 并访问它。当我尝试通过 C# 执行此操作时,生成的签名 URL 无效。
这是 returns 有效的命令行 url:
aws cloudfront sign --url https://MyPath.com/testfile.txt
--key-pair-id "keypairIDvalue" --private-key file://bas_key.pem --date-less-than 2022-01-01
代码是这样的:
static void Main(string[] args)
{
// technique 1
string policyDoc = Amazon.CloudFront.AmazonCloudFrontUrlSigner.BuildPolicyForSignedUrl(
@"https://MyPath/testfile.txt",
DateTime.Today.AddDays(+4),
"myIPAddress");
string signurl = Amazon.CloudFront.AmazonCloudFrontUrlSigner.SignUrl(
@"https://MyPath/testfile.txt",
"KeypairID",
new StreamReader(@"c:\keys\Bas_key.pem"),
policyDoc);
// the signurl does not work
// technique 2
string newurl = Amazon.CloudFront.AmazonCloudFrontUrlSigner.GetCustomSignedURL(
@"https://MyPath/testfile.txt",
new StreamReader(@"c:\keys\Bas_key.pem"),
"KeypairID",
DateTime.Today.AddDays(4),
DateTime.Today.AddDays(-1),
"MyIPAddress");
// newurl is different to signurl but also does not work
Console.WriteLine(newurl);
}
我的大多数例子似乎都有很多额外的代码来做各种零碎的事情,但这里的一切都是设置和配置的。我只需要 API 命令来获取 URL,文档似乎暗示这是执行此操作的预期方式,但我无法使其工作。上述技术均无效。
谁能看出我做错了什么?
已修复!
工作代码是这个!
static void Main(string[] args)
{
// technique 1
string policyDoc = Amazon.CloudFront.AmazonCloudFrontUrlSigner.BuildPolicyForSignedUrl(
null,
DateTime.Today.AddDays(+1),
null);
string signurl = Amazon.CloudFront.AmazonCloudFrontUrlSigner.SignUrl(
@"https://MyPath/testfile.txt",
"KeypairID",
new StreamReader(@"c:\keys\Bas_key.pem"),
policyDoc);
Console.WriteLine(signurl);
}
有几个类似的问题,但没有一个完全相同:
我们有一个带有 CloudFront 的 S3 存储桶,配置为使用已签名的URLs。我可以使用命令行生成签名的 URL 并访问它。当我尝试通过 C# 执行此操作时,生成的签名 URL 无效。
这是 returns 有效的命令行 url:
aws cloudfront sign --url https://MyPath.com/testfile.txt --key-pair-id "keypairIDvalue" --private-key file://bas_key.pem --date-less-than 2022-01-01
代码是这样的:
static void Main(string[] args)
{
// technique 1
string policyDoc = Amazon.CloudFront.AmazonCloudFrontUrlSigner.BuildPolicyForSignedUrl(
@"https://MyPath/testfile.txt",
DateTime.Today.AddDays(+4),
"myIPAddress");
string signurl = Amazon.CloudFront.AmazonCloudFrontUrlSigner.SignUrl(
@"https://MyPath/testfile.txt",
"KeypairID",
new StreamReader(@"c:\keys\Bas_key.pem"),
policyDoc);
// the signurl does not work
// technique 2
string newurl = Amazon.CloudFront.AmazonCloudFrontUrlSigner.GetCustomSignedURL(
@"https://MyPath/testfile.txt",
new StreamReader(@"c:\keys\Bas_key.pem"),
"KeypairID",
DateTime.Today.AddDays(4),
DateTime.Today.AddDays(-1),
"MyIPAddress");
// newurl is different to signurl but also does not work
Console.WriteLine(newurl);
}
我的大多数例子似乎都有很多额外的代码来做各种零碎的事情,但这里的一切都是设置和配置的。我只需要 API 命令来获取 URL,文档似乎暗示这是执行此操作的预期方式,但我无法使其工作。上述技术均无效。
谁能看出我做错了什么?
已修复!
工作代码是这个!
static void Main(string[] args)
{
// technique 1
string policyDoc = Amazon.CloudFront.AmazonCloudFrontUrlSigner.BuildPolicyForSignedUrl(
null,
DateTime.Today.AddDays(+1),
null);
string signurl = Amazon.CloudFront.AmazonCloudFrontUrlSigner.SignUrl(
@"https://MyPath/testfile.txt",
"KeypairID",
new StreamReader(@"c:\keys\Bas_key.pem"),
policyDoc);
Console.WriteLine(signurl);
}