如何使用 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);
}