Azure: подпись общего доступа, сгенерированная SDK, не работает в браузере - PullRequest
1 голос
/ 22 февраля 2020

Я генерирую SAS через CloudStorageAccount примерно так:

var sharedAccessAccountPolicy = new SharedAccessAccountPolicy
{
     Permissions = SharedAccessAccountPermissions.Read | SharedAccessAccountPermissions.Write,
     Services = SharedAccessAccountServices.Blob,
     ResourceTypes = SharedAccessAccountResourceTypes.Object,
     SharedAccessExpiryTime = DateTime.UtcNow.AddYears(1),
     Protocols = SharedAccessProtocol.HttpsOnly
};

return cloudStorageAccount.GetSharedAccessSignature(sharedAccessAccountPolicy);

Проблема в том, что когда я добавляю SAS к URL-адресу большого двоичного объекта и вставляю полученную строку в браузер, я получение AuthenticationFailed (Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature) с детализацией Signature did not match.

Если я создаю SAS на портале Azure (или Azure Storage Explorer), то SAS работает в браузере. Я заметил, что существуют различия между SAS, сгенерированным SDK, и SAS, сгенерированным порталом.

  • Портал показывает ?sv=2019-02-02, тогда как SDK показывает ?sv=2018-03-28. Есть ли способ вручную настроить это в SDK для соответствия порталу?
  • Портал добавляет : к дате истечения срока действия SAS, тогда как SDK добавляет %3A. Имеет ли это значение?

Вот URL и токен SAS SDK:

https://myaccount.blob.core.windows.net/mycontainer/giphy.gif?sv=2018-03-28&sig=<sigValue>&spr=https&st=2020-02-22T18%3A02%3A12Z&se=2021-02-22T18%3A02%3A12Z&srt=o&ss=b&sp=rw

Источник страницы:

<?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:c662b297-e01e-0065-19ac-e9e3d0000000
Time:2020-02-22T18:17:24.7226395Z</Message><AuthenticationErrorDetail>Signature did not match. String to sign used was myaccount
rw
b
o
2020-02-22T18:02:12Z
2120-02-22T18:02:12Z

https
2018-03-28
</AuthenticationErrorDetail></Error>

Генерируется порталом:

?sv=2019-02-02&ss=b&srt=o&sp=rw&se=2021-02-23T02:18:59Z&st=2020-02-22T18:18:59Z&spr=https&sig=<sigValue>

1 Ответ

1 голос
/ 22 февраля 2020

Сам нашел ответ, потратив много часов, пытаясь определить причину root. По какой-то причине подстрока $spr=https должна быть добавлена ​​в конец токена. Когда клиентский SDK генерирует токен, эта подстрока появляется в начале и вызывает проблемы с аутентификацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...