【发布时间】:2018-08-14 12:22:37
【问题描述】:
我正在我的 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 存储资源管理器中使用此密钥时,我收到一条错误消息:Inadequate resource type access. At least service-level ('s') access is required.
当我尝试使用 javascript 中的此密钥创建容器时,我收到一条错误消息,指出 Refused to set unsafe header "user-agent" in azure-storage-blob.min.js 文件(来自微软的 azure storage api)。
我已在SharedAccessAccountPolicy 中添加了创建权限,但生成的密钥由于某种原因无法正常工作。
编辑: 用于创建 blob 服务的 Javascript 代码。
var blobService = AzureStorage.Blob.createBlobServiceWithSas(blobUri, $("#SASToken").val());
blobService.createContainerIfNotExists(folderID, function (error, result) {
if (error) {
return false;
} else {
return true;
}
});
编辑:
下面是天蓝色门户的屏幕截图,我尝试在其中生成手动令牌。根据文档,即使该令牌也包含ss=b,而不是sr=b。
我尝试了手动生成的令牌。并且 JS 代码仍然显示Refused to set unsafe header "user-agent"。
【问题讨论】:
-
您能分享您的 SAS 令牌吗?您可以混淆其中的
signature部分。 -
?sv=2015-07-08&sig=xi2R7H%2B0iJc%3D&spr=https%2Chttp&se=2018-08-14T22%3A49%3A39Z&srt=co&ss=b&sp=rcw 这里。删除了部分签名。
-
你的 sig 上写着 ss=b,我认为根据docs.microsoft.com/en-us/azure/storage/common/…应该读为 sr=b
-
这很奇怪。我不确定,为什么会出错。我可能错过了blob中的一些设置吗?当我从 azure 门户生成令牌时,该令牌还附带 ss=b。显然我的设置中缺少某些内容。