Поставить черный список запрещенных Azure - PullRequest
0 голосов
/ 15 мая 2018

Я новичок в Azure, и я пытаюсь реализовать операцию Put Block List в соответствии с документацией . Вот шаги, которые я делаю, чтобы загрузить свой файл

  1. Чтение файла из локальной папки
  2. Загрузите его, используя операцию Put block. это получает успех.
  3. Тогда я использую Get Block List чтобы посмотреть, загружены ли мои блоки, и в ответе я вижу
<BlockList><CommittedBlocks /><UncommittedBlocks><Block><Name>MDAwMDAwMDAwMA==</Name><Size>17</Size></Block></UncommittedBlocks></BlockList>

, что у меня есть один uncommited блок с идентификатором MDAwMDAwMDAwMA==.

  1. И, наконец, я использую Put Block List для фиксации BLOB-объекта. Здесь я получаю код ошибки 403 «Запрещено».

Моя подпись следующая

"PUT\n
\n
\n
110\n
\n
\n
\n
\n
\n
\n
\n
\n
x-ms-date:Tue, 15 May 2018 10:54:08 GMT\nx-ms-version:2017-07-29\n
/storagekaren/dbstore/ddd.txt\ncomp:blocklist"

Вот это ури

https://storagekaren.blob.core.windows.net/dbstore/ddd.txt?comp=blocklist

запрос контента

"<?xml version=\"1.0\" encoding=\"utf-8\"? 
>\r\n<BlockList>\r\n<Uncommitted>MDAwMDAwMDAwMA==</Uncommitted> 
</BlockList>\r\n"

authorizationHeader вычисляется с использованием этого метода

public static String CreateAuthorizationHeader(String canonicalizedString)
    {
        string signature;

        using (var hmacSha256 = new         
HMACSHA256(Convert.FromBase64String(STORAGE_ACCOUNT_KEY)))
        {
            var dataToHmac = Encoding.UTF8.GetBytes(canonicalizedString);
            signature = 
Convert.ToBase64String(hmacSha256.ComputeHash(dataToHmac));
        }

        var authorizationHeader = String.Format(
            CultureInfo.InvariantCulture,
            "{0} {1}:{2}",
            "SharedKey",
            ACCOUNT_NAME,
            signature
        );

        return authorizationHeader;
    }

"SharedKey storagekaren:eIHacFz/PWypTWg6SN/4BOuqlCLVLctABhi6Ay7TYiA="

И это мой объект HttpClient для выполнения запроса

{System.Net.Http.HttpClient}
    BaseAddress: null
    DefaultRequestHeaders: {x-ms-date: Tue, 15 May 2018 11:07:51 GMT
x-ms-version: 2017-07-29
Authorization: SharedKey     storagekaren:eIHacFz/PWypTWg6SN/4BOuqlCLVLctABhi6Ay7TYiA=
}
    MaxResponseContentBufferSize: 2147483647
    Timeout: {01:00:00}

Вот ответ с ошибкой

HTTP/1.1 403 Server failed to authenticate the request. Make sure the value         
of Authorization header is formed correctly including the signature.
Content-Length: 686
Content-Type: application/xml
Server: Microsoft-HTTPAPI/2.0
x-ms-request-id: 7a96deee-201e-00fc-78de-ec0ffc000000
x-ms-error-code: AuthenticationFailed
Date: Wed, 16 May 2018 06:22:35 GMT

<?xml version="1.0" encoding="utf-8"?><Error>    
<Code>AuthenticationFailed</Code><Message>Server failed to authenticate the 
request. Make sure the value of Authorization header is formed correctly 
including the signature.
RequestId:7a96deee-201e-00fc-78de-ec0ffc000000
Time:2018-05-16T06:22:36.0842958Z</Message><AuthenticationErrorDetail>The 
MAC signature found in the HTTP request 
'E9M4w8nHaBbAsgW3Qhf+u5nHipvmxMvLp09AFdaxYZg=' is not the same as any 
computed signature. Server used following string to sign: 'PUT


110

text/plain






x-ms-date:Wed, 16 May 2018 06:22:34 GMT
x-ms-version:2017-07-29
/storagekaren/dbstore/ddd.txt
comp:blocklist'.</AuthenticationErrorDetail></Error>

Пожалуйста, помогите мне понять, что я делаю не так?

1 Ответ

0 голосов
/ 16 мая 2018

По существу, проблема наступает, потому что HttpClient добавляет text/plain для Content-Type заголовка, в то время как вы передаете для этого пустую строку. Если вы измените свою строку подписи, чтобы включить заголовок типа содержимого, я думаю, что вы не должны получить эту ошибку. По сути, ваша строка подписи должна выглядеть следующим образом:

"PUT\n
\n
\n
110\n
\n
text/plain\n
\n
\n
\n
\n
\n
\n
x-ms-date:Tue, 15 May 2018 10:54:08 GMT\nx-ms-version:2017-07-29\n
/storagekaren/dbstore/ddd.txt\ncomp:blocklist"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...