Доступ к API хранилища файлов Azure с использованием подписи общего доступа

В настоящее время я пытаюсь получить доступ к файлам и каталогам в общей папке учетной записи хранения Azure (назовем ее rootdirectory ) из действия на странице Dynamics Business Central.

Метод доступа к файлам, хранящимся в нем, заключается в создании и отправке HTTP-запроса GET (с клиентом) в https://myaccount.file.core.windows.net/myfileshare/rootdirectory для получения списка файлов.

Я пытаюсь использовать подпись общего доступа для аутентификации запроса.

Блокирующей точкой, через которую я не могу пройти, является следующее сообщение об ошибке:

Authentication information is not given in the correct format. Check the value of Authorization header.

Я устанавливаю заголовки своих запросов следующим образом:

client.DefaultRequestHeaders().Clear();
client.DefaultRequestHeaders().Add('x-msdate', '2019-02-20');
client.DefaultRequestHeaders().Add('Authorization', '...');

Моя основная проблема заключается в том, что я не могу найти правильный формат (для использования в части «...»), заданный в сообщении об ошибке в любом учебнике.

Я пробовал следующие форматы (и небольшие вариации внутри него)

'SharedAccessSignature myaccount:signature'
'SharedAccessSignature sv=2018-03-28&ss=f&srt=sco&sp=rwdlc&se=2019-02-20T18:12:27Z&st=2019-02-20T10:12:27Z&spr=https&sig=signature'
'SharedAccessSignature sr=https%3A%2F%2Fmyaccount.file.core.windows.net%2Fmyfileshare%2Frootdirectory&sig=signature&se=2019-02-21T22:36:05Z&skn=key1'

Я также пытался поместить его в сервисный URI, ничего лучше.

Кто-нибудь уже сталкивался с этой проблемой?

Любая помощь будет оценена по достоинству.

Спасибо за ваше время.


person Canass3242    schedule 21.02.2019    source источник
comment
Был ли ответ ниже полезен для вас?   -  person Adam Smith - Microsoft Azure    schedule 26.02.2019


Ответы (1)


Я настоятельно рекомендую проверить следующий сообщение. В итоге они использовали следующий код:

public AzureSASToken GetSASFromShare(string shareName)
        {
            var share = _fileclient.GetShareReference(shareName);
            share.CreateIfNotExists();
            string policyName = "UPARSharePolicy";

            // Create a new shared access policy and define its constraints.
            var sharedPolicy = new SharedAccessFilePolicy()
            {
                SharedAccessExpiryTime = DateTime.UtcNow.AddDays(15),
                Permissions = SharedAccessFilePermissions.Read | SharedAccessFilePermissions.Write
            };

            // Get existing permissions for the share.
            var permissions = share.GetPermissions();

            // Add the shared access policy to the share's policies. 
            // Note that each policy must have a unique name.
            // Maximum 5 policies for each share!
            if (!permissions.SharedAccessPolicies.Keys.Contains(policyName))
            {
                if (permissions.SharedAccessPolicies.Count > 4)
                {
                    var lastAddedPolicyName = permissions.SharedAccessPolicies.Keys.Last();
                    permissions.SharedAccessPolicies.Remove(lastAddedPolicyName);
                }
                permissions.SharedAccessPolicies.Add(policyName, sharedPolicy);
                share.SetPermissions(permissions);
            }            

            var sasToken = share.GetSharedAccessSignature(sharedPolicy);
            //fileSasUri = new Uri(share.StorageUri.PrimaryUri.ToString() + sasToken);
            return new AzureSASToken ()
            {
               Name = shareName,
               Url = share.StorageUri.PrimaryUri.ToString() + "/",
               SASToken = sasToken        
            };
        }
person Adam Smith - Microsoft Azure    schedule 22.02.2019