Ich versuche, etwas Code zum Abrufen einer Datei aus S3 mit der REST-API über C# zu bekommen. Ich habe andere Leute gesehen, die ähnliche Dinge gemacht haben, aber aus irgendeinem Grund bekomme ich immer einen 403 Fehler. Ich habe versucht, das gleiche mit dem AWS SDK für .Net zu tun, und es funktioniert, so nehme ich an, es ist die Art, wie ich den Autorisierungsheader erstelle.Amazon S3 REST API 403 Fehler C#
Kann jemand bitte Licht darauf werfen?
string awsAccessId = "***";
string awsSecretKey = "***";
string bucketName = "thebucket";
string httpDate = DateTime.Now.ToString("ddd, dd MMM yyyy HH:mm:ss +0000\n");
string canonicalString = "GET\n"
+ "\n"
+ "\n"
+ "x-amz-date:" + httpDate + "\n"
+ "/" + bucketName + "/readme.txt";
// now encode the canonical string
Encoding ae = new UTF8Encoding();
// create a hashing object
HMACSHA1 signature = new HMACSHA1();
// secretId is the hash key
signature.Key = ae.GetBytes(awsSecretKey);
byte[] bytes = ae.GetBytes(canonicalString);
byte[] moreBytes = signature.ComputeHash(bytes);
// convert the hash byte array into a base64 encoding
string encodedCanonical = Convert.ToBase64String(moreBytes);
// Send the request
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://" + bucketName +".s3.amazonaws.com/readme.txt");
request.Headers.Add("x-amz-date", httpDate);
request.Headers.Add("Authorization", "AWS " + awsAccessId + ":" + encodedCanonical);
request.Method = "GET";
// Get the response
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Console.WriteLine(response.StatusCode);
Console.Read();
Warum nicht die SDK verwenden, wenn es funktioniert? –
Ich hoffe, es in eine SSIS-Skriptaufgabe – MarkJ