2

Ich habe versucht, die .NET AWS Cloudfront-API zu verwenden, um signierte Cookies für meine S3-Bucket zu erstellen, aber jedes Mal, wenn ich eine HTTP-Anfrage mit den Cookies, die erstellt werden, senden ein Ergebnis von "Verboten". Gibt es etwas, das ich in diesem Code falsch mache? Vielen Dank.Erstellen von signierten Cookies mit AWS Cloudfront-API in C#

CookiesForCannedPolicy cookies = AmazonCloudFrontCookieSigner.GetCookiesForCannedPolicy(
    @"http://distribution123abc.cloudfront.net/*", 
    "KEYPAIRID", 
    new FileInfo(@"C:\bla\privatekey.pem"), 
    DateTime.Now.AddHours(1)); 

Uri target = new Uri(@"http://distribution123abc.cloudfront.net"); 
HttpWebRequest pleaseWork = (HttpWebRequest)WebRequest.Create(@"http://distribution123abc.cloudfront.net/files/test.txt"); 

if (pleaseWork.CookieContainer == null) 
{ 
    pleaseWork.CookieContainer = new CookieContainer(); 
} 
pleaseWork.CookieContainer.Add(new Cookie(cookies.Signature.Key, cookies.Signature.Value) { Domain = target.Host }); 
pleaseWork.CookieContainer.Add(new Cookie(cookies.KeyPairId.Key, cookies.KeyPairId.Value) { Domain = target.Host }); 
pleaseWork.CookieContainer.Add(new Cookie(cookies.Expires.Key, cookies.Expires.Value) { Domain = target.Host }); 

try 
{ 
    WebResponse response = pleaseWork.GetResponse(); 
    Console.WriteLine("Response content length: " + response.ContentLength); 
} 
catch(WebException e) 
{ 
    Console.WriteLine(e.Message); 
} 

Antwort

1

Ich fand eine Lösung. Ich musste zwei Dinge ändern:

Zuerst musste ich signierte Cookies für eine benutzerdefinierte Richtlinie anstelle einer vordefinierten Richtlinie verwenden (und daher einen "Policy" -Cookie anstelle eines "Expires" -Cookies verwenden).

Zweitens war die Domäne, die ich für meine Cookies eingestellt hatte, falsch. Ich musste die Domäne nur als ".cloudfront.net" definieren, anstatt die Domäne für meine Distribution anzugeben.

Dies ist, was mein Code wie am Ende aussah:

CookiesForCustomPolicy cookies = AmazonCloudFrontCookieSigner.GetCookiesForCustomPolicy(
    @"http://distribution123abc.cloudfront.net/*", 
    new StreamReader(@"C:\bla\privatekey.pem"), 
    "KEYPAIRID", 
    DateTime.Now.AddHours(1), 
    DateTime.Now.AddHours(-1), 
    "1.1.1.1"); 

string domain = ".cloudfront.net"; 
HttpWebRequest pleaseWork = (HttpWebRequest)WebRequest.Create(@"http://distribution123abc.cloudfront.net/files/test.txt"); 

if (pleaseWork.CookieContainer == null) 
{ 
    pleaseWork.CookieContainer = new CookieContainer(); 
} 
pleaseWork.CookieContainer.Add(new Cookie(cookies.Signature.Key, cookies.Signature.Value) { Domain = domain }); 
pleaseWork.CookieContainer.Add(new Cookie(cookies.KeyPairId.Key, cookies.KeyPairId.Value) { Domain = domain }); 
pleaseWork.CookieContainer.Add(new Cookie(cookies.Policy.Key, cookies.Policy.Value) { Domain = domain }); 

try 
{ 
    WebResponse response = pleaseWork.GetResponse(); 
    Console.WriteLine("Response content length: " + response.ContentLength); 
} 
catch(WebException e) 
{ 
    Console.WriteLine(e.Message); 
} 
+1

Sobald ich den IP-Bereich 0.0.0.0/0 dies funktionierte perfekt geändert, danke – ScottieMc

Verwandte Themen