【问题标题】:Azure File Storage API access using Shared Access Signature使用共享访问签名的 Azure 文件存储 API 访问
【发布时间】:2019-02-23 02:14:15
【问题描述】:

我目前正在尝试通过 Dynamics Business Central 页面操作访问 Azure 存储帐户文件共享(我们称之为 rootdirectory)上的文件和目录。

访问存储在其中的文件的方法是构建并向https://myaccount.file.core.windows.net/myfileshare/rootdirectory 发送 HTTP GET 请求(使用客户端)以检索文件列表。

我正在尝试使用共享访问签名来验证请求。

我无法通过的阻塞点是以下错误消息:

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 中,没有比这更好的了。

有人遇到过这个问题吗?

任何帮助将不胜感激。

感谢您的宝贵时间。

【问题讨论】:

  • 以下回复对您有帮助吗?

标签: azure-storage dynamics-business-central


【解决方案1】:

我强烈建议您查看以下post。 他们最终使用了以下代码:

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        
            };
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-29
    • 2012-11-07
    • 2022-10-21
    • 2023-04-05
    • 2013-05-29
    • 2017-08-24
    • 2014-02-08
    相关资源
    最近更新 更多