2

J'ai essayé d'utiliser l'API .NET AWS Cloudfront pour créer des cookies signés pour mon compartiment S3, mais chaque fois que j'envoie une requête HTTP avec les cookies créés, je reçois un résultat de "Interdit". Y at-il quelque chose que je fais mal dans ce code? Merci.Création de cookies signés à l'aide de l'API AWS Cloudfront en 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); 
} 

Répondre

1

J'ai trouvé une solution. J'ai dû changer deux choses:

D'abord, j'ai dû utiliser des cookies signés pour une politique personnalisée plutôt qu'une politique préétablie (et donc utiliser un cookie "Policy" plutôt qu'un cookie "Expires"). Deuxièmement, le domaine que je définissais pour mes cookies était incorrect. J'avais besoin de définir le domaine comme juste ".cloudfront.net", plutôt que de spécifier le domaine pour ma distribution.

C'est ce que mon code ressemblait à la fin:

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

Une fois que je l'ai changé la gamme IP 0.0.0.0/0 cela a fonctionné parfaitement, merci – ScottieMc