Я пытаюсь использовать класс CloudBlobClient c # в своем приложении-функции v2 для чтения данных из файла, хранящегося в хранилище BLOB-объектов Azure.При локальном запуске мой код может получить данные обратно, однако, когда код развернут с той же строкой подключения и моим кодом вызова GetBlobReferenceFromServerAsync
, я получаю следующую ошибку:
Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature.
Я взял строку подключения из учетной записи хранения> Ключи доступа> Строка подключения для ключа 1, которая имеет следующий формат:
DefaultEndpointsProtocol=https;AccountName=<AccountName>;AccountKey=<AccountKey>;EndpointSuffix=core.windows.net
Я попытался передать владельца учетной записи службы приложений.доступ к учетной записи хранения и пробовал использовать подписи общего доступа, но пока ничего не получалось.Существуют ли определенные разрешения, которые необходимо применить к приложению-функции или к учетной записи хранения, чтобы эта функция работала?
Ниже приведен фрагмент кода:
var storageConnectionString = blobConfig.ConnectionString;
if (CloudStorageAccount.TryParse(storageConnectionString, out var storageAccount))
{
try
{
// Create the CloudBlobClient that represents the Blob storage endpoint for the storage account.
var cloudBlobClient = storageAccount.CreateCloudBlobClient();
var container = cloudBlobClient.GetContainerReference(containerName);
var uri = new Uri(cloudBlobClient.BaseUri, $"/{containerName}{path}");
// get the blob object and download to file
// ---- THROWS ON NEXT LINE ----
var blobRef = await cloudBlobClient.GetBlobReferenceFromServerAsync(uri);
var tempFilePath = System.IO.Path.GetTempFileName();
await blobRef.DownloadToFileAsync(tempFilePath, System.IO.FileMode.Truncate);
return tempFilePath;
}
catch (StorageException ex)
{
log.LogError(ex, "Error returned from the service: {0}", ex.Message);
throw;
}
}
Изменить Следует отметить, что развернутая версия этой функции работает по подписке Azure Dev / Test.Не уверен, что это здесь.Я попытаюсь развернуть подписку не на Dev и посмотреть, разрешит ли она что-нибудь.