我正在C#代码中创建SAS密钥,如下所示。
string returnValue = String.Empty;
// Create a new access policy for the account with the following properties:
SharedAccessAccountPolicy policy = new SharedAccessAccountPolicy()
{
Permissions = SharedAccessAccountPermissions.Read | SharedAccessAccountPermissions.Write | SharedAccessAccountPermissions.Create,
Services = SharedAccessAccountServices.Blob,
ResourceTypes = SharedAccessAccountResourceTypes.Container | SharedAccessAccountResourceTypes.Object,
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(10),
Protocols = SharedAccessProtocol.HttpsOrHttp
};
// Create new storage credentials using the SAS token.
ExecuteWithExceptionHandling(
() =>
{
returnValue = storageAccount.GetSharedAccessSignature(policy);
});
return returnValue;
此代码正确生成了一个密钥。但是,当我尝试在Azure Storage Explorer中使用此密钥时,出现错误消息Inadequate resource type access. At least service-level ('s') access is required.
当我尝试使用javascript中的此键创建容器时,在Refused to set unsafe header "user-agent"
文件中收到说azure-storage-blob.min.js
的错误(来自Microsoft的Azure Storage api)。
我在SharedAccessAccountPolicy
中添加了创建许可权,但是由于某些原因,生成的密钥不起作用。
编辑: 用于创建blobservice的Javascript代码。
var blobService = AzureStorage.Blob.createBlobServiceWithSas(blobUri, $("#SASToken").val());
blobService.createContainerIfNotExists(folderID, function (error, result) {
if (error) {
return false;
} else {
return true;
}
});
编辑:
下面是azure门户的屏幕截图,我尝试在其中生成手动令牌。甚至该令牌中也包含ss=b
,而不是文档中的sr=b
。
我尝试了手动生成的令牌。并且JS代码仍然显示Refused to set unsafe header "user-agent"
。
答案 0 :(得分:1)
显然,这是Azure提供的该死的js文件的问题。 https://github.com/Azure/azure-storage-node/issues/463 这是一张关于它的公开票。
无论如何,到目前为止,我已经添加了一个条件以确保不添加标题。如果代码仍然失败,我将创建另一个问题。
我认为,在两天内,我可以获取Azure的js的最新更新,并且此问题可以自行解决。万一任何人都需要快速修复,这是我完成的代码更改。
if (e[0] != 'user-agent'){ s.setRequestHeader(e[0],e[1])}}
代替s.setRequestHeader(e[0],e[1])}
这只是一个临时解决方案。最佳选择仍然是将Azure存储js文件更新到2.10.101版本或更高版本。