2017-01-09 4 views
1

Я получаю сообщение об ошибке «Сервер Ошибка аутентификации запроса. Убедитесь, что значение заголовка Authorization формируется правильно в том числе подписи.»Невозможно удалить Azure Table Storage с помощью Azure REST API

Я последовал руководство по авторизации, предоставленное Microsoft, Delete Table, Authentication for the Azure Storage Services.

Я ничего не пропустил?

enter image description here

+3

Не могли бы вы рассказать, как вы вычисляете значение заголовка авторизации? Мое предположение: вы упускаете простую вещь. –

+0

@GauravMantri Действительно, проблема заключалась в вычислениях значения заголовка авторизации. – Sameer

ответ

2

кажется, что вы хотели бы delete table via rest api.

DELETE https://myaccount.table.core.windows.net/Tables («туЬаЫе»)

следующий пример отлично работает на моей стороне, пожалуйста, обратитесь к коду для создания подписи.

string StorageAccount = "account name here"; 
string StorageKey = "account key here"; 
string tablename = "table name"; 

string requestMethod = "DELETE"; 
string mxdate = ""; 
string storageServiceVersion = "2015-12-11"; 

protected void Button1_Click(object sender, EventArgs e) 
{ 
    HttpWebRequest req = (HttpWebRequest)WebRequest.Create(string.Format(CultureInfo.InvariantCulture, 
    "https://{0}.table.core.windows.net/Tables('{1}')", 
    StorageAccount, tablename)); 

    req.Method = requestMethod; 

    //specify request header 
    string AuthorizationHeader = generateAuthorizationHeader(); 
    req.Headers.Add("Authorization", AuthorizationHeader); 
    req.Headers.Add("x-ms-date", mxdate); 
    req.Headers.Add("x-ms-version", storageServiceVersion); 
    req.ContentType = "application/json"; 

    req.Accept = "application/json;odata=minimalmetadata"; 

    using (HttpWebResponse response = (HttpWebResponse)req.GetResponse()) 
    { 

    } 
} 

public string generateAuthorizationHeader() 
{ 
    mxdate = DateTime.UtcNow.ToString("R"); 

    string canonicalizedResource = $"/{StorageAccount}/Tables('{tablename}')"; 

    string contentType = "application/json"; 

    string stringToSign = $"{requestMethod}\n\n{contentType}\n{mxdate}\n{canonicalizedResource}"; 

    HMACSHA256 hmac = new HMACSHA256(Convert.FromBase64String(StorageKey)); 

    string signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign))); 

    String authorization = String.Format("{0} {1}:{2}", 
     "SharedKey", 
     StorageAccount, 
     signature 
     ); 

    return authorization; 
}