Маркер SAS хранилища файлов Azure - ошибка 403

Я пытаюсь реализовать подпись общего доступа (SAS) для операций хранилища файлов Azure с помощью клиента библиотеки хранилищ в.NET. Я создал учетную запись хранения и создал общий доступ к файлам через портал (модель ARM). Используя приведенный ниже код, я генерирую токен SAS и URL.

StorageCredentials sCred = new StorageCredentials("mystorageaccountname", "lhxxxxxxxxxxxxxxxxxxxxxxxxxxx-my key -xxxxxxxxxxxxxxx");
CloudFileClient cfc = new CloudFileClient(new Uri(@"https://myfileserviceendpoint.file.core.windows.net/"),sCred);

SharedAccessFilePolicy sasPolicy = new SharedAccessFilePolicy()
{
    Permissions = SharedAccessFilePermissions.Read | SharedAccessFilePermissions.Write | SharedAccessFilePermissions.Create,
    SharedAccessExpiryTime = DateTime.UtcNow.AddDays(1)
};

CloudFileShare fs = cfc.GetShareReference("samplefileshare");

if(fs.Exists())
{
    _strToken = @"https://myfileserviceendpoint.file.core.windows.net/" + fs.GetSharedAccessSignature(sasPolicy);                
}

После этого я пытаюсь получить доступ к файлообменнику из другого приложения и перебирать список файлов и каталогов, используя сгенерированный выше токен. Код показан ниже:

CloudFileShare fs = new CloudFileShare(new Uri(_strToken)); //_strToken generated above
CloudFileDirectory cfd = fs.GetRootDirectoryReference();
foreach(var item in cfd.ListFilesAndDirectories())
{
    //process item     
}

Тем не менее, я получаю следующую ошибку:

Microsoft.WindowsAzure.Storage.StorageException: "Удаленный сервер возвратил ошибку: (403) Запрещено".

Я получаю эту ошибку в строке "foreach(var item в cfd.ListFilesAndDirectories())".

Любые указатели будут высоко оценены.

1 ответ

Решение

Я считаю, что есть две проблемы:

  1. Ваша подпись общего доступа отсутствует List разрешение. Чтобы получить список файлов / каталогов в общем ресурсе, SAS должен иметь List разрешение.
  2. Ваш _strToken переменная не имеет имени общего ресурса. Так должно быть:

    _strToken = @ " https://myfileserviceendpoint.file.core.windows.net/samplefileshare" + fs.GetSharedAccessSignature (sasPolicy);

Другие вопросы по тегам