使用共享访问签名访问 Azure 文件存储 API
Azure File Storage API access using Shared Access Signature
我目前正在尝试通过 Dynamics Business Central 页面操作访问 Azure 存储帐户文件共享(我们称之为 rootdirectory)上的文件和目录。
访问存储在其中的文件的方法是构建并发送 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.
我正在这样设置我的请求 headers :
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 中,没有更好的方法。
有没有人遇到过这个问题?
如有任何帮助,我们将不胜感激。
感谢您的宝贵时间。
我强烈建议检查以下内容 。
他们最终使用了以下代码:
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
};
}
我目前正在尝试通过 Dynamics Business Central 页面操作访问 Azure 存储帐户文件共享(我们称之为 rootdirectory)上的文件和目录。
访问存储在其中的文件的方法是构建并发送 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.
我正在这样设置我的请求 headers :
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 中,没有更好的方法。
有没有人遇到过这个问题?
如有任何帮助,我们将不胜感激。
感谢您的宝贵时间。
我强烈建议检查以下内容
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
};
}