J'ai travaillé sur une validation de principe et je souhaite effectuer des tests sur l'API Azure Storage REST. Cependant, je ne peux pas m'authentifier. J'ai essayé toute la journée avec la lecture et l'ajustement et la réécriture et cela ne fonctionne toujours pas. J'ai parcouru la documentation étape par étape. Je souhaite trouver quelqu'un qui a réussi cela. Beaucoup de bits codés en dur, c'est juste pour le faire fonctionner. Je continue à obtenir cette erreur de retour en réponseAzure Blob Storage Signature de l'API REST
La signature MAC trouvée dans la requête HTTP « » est pas la même que toute signature calculée
Quelqu'un peut-il voir ce qui est peut-être me regarder en face? Cela me rend fou.
var requestDateString = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture);
var StorageAccountName = "<account removed>";
var StorageKey = "<key removed>";
using (var client = new HttpClient())
{
var stringToSign = new List<string>(){
"GET" /*HTTP Verb*/
,"" /*Content-Encoding*/
,"" /*Content-Language*/
,"" /*Content-Length (include value when zero)*/
,"" /*Content-MD5*/
,"" /*Content-Type*/
,"" /*Date*/
,"" /*If-Modified-Since */
,"" /*If-Match*/
,"" /*If-None-Match*/
,"" /*If-Unmodified-Since*/
,"" /*Range*/
,$"x-ms-date:{requestDateString}\nx-ms-version:2015-02-21" /*CanonicalizedHeaders*/
,$"/{StorageAccountName}/ " + _containerName + "\ncomp:metadata\nrestype:container\ntimeout:20" /*CanonicalizedResource*/
};
string signature;
using (var hmac = new HMACSHA256(Convert.FromBase64String(StorageKey)))
{
var compiledStringToSign = (string.Join("\n", stringToSign));
byte[] dataToHmac = Encoding.UTF8.GetBytes(compiledStringToSign);
signature = Convert.ToBase64String(hmac.ComputeHash(dataToHmac));
}
//Send Request
client.DefaultRequestHeaders.Add("x-ms-date", requestDateString);
client.DefaultRequestHeaders.Add("x-ms-version", " 2015-02-21");
client.DefaultRequestHeaders.Add("Authorization", $"SharedKey {StorageAccountName}:" + signature);
var response = client.SendAsync(request);
// modifier L'URL de la requête est https://account.blob.core.windows.net/testcontainer/blobtest/blob1234
L'erreur est tout à fait spécifique sur l'authentification à défaut, donc je pense que l'erreur doit être dans la signature, je ne vois vraiment pas cependant. J'ai vérifié toutes les sorties avec fiddler pour m'assurer qu'elles correspondent
Puis-je demander pourquoi ne pas utiliser Azure SDK stockage pour C#? –
Je l'ai déjà implémenté en Python lorsqu'il n'y avait pas de SDK. AFAIK le C# SDK est open source chez GitHub et vous pouvez consulter le code - il y a deux ans j'ai trouvé l'implémentation très lisible –
Pouvez-vous partager l'URL de la requête aussi? –