【问题标题】:"Inadequate resource type access" when creating Azure Blob SAS key in C#在 C# 中创建 Azure Blob SAS 密钥时出现“资源类型访问不足”
【发布时间】: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。显然我的设置中缺少某些内容。

标签: c# azure


【解决方案1】:

显然这是Azure提供的该死的js文件的问题。 https://github.com/Azure/azure-storage-node/issues/463 这是一张关于它的公开票。

无论如何,现在,我已经添加了一个条件来确保不添加标题。如果代码仍然失败,我将创建一个不同的问题。

我认为,在 2 天内,我可以获取 Azure js 的最新更新,这应该会自行修复。仍然以防万一,任何人都需要快速修复,这是我所做的代码更改。

if (e[0] != 'user-agent'){ s.setRequestHeader(e[0],e[1])}}

而不是s.setRequestHeader(e[0],e[1])}

这只是一个临时修复。对于 azure storage js 文件,最好的选择仍然是更新到 2.10.101 或更高版本。

【讨论】:

    猜你喜欢
    • 2019-12-05
    • 1970-01-01
    • 2021-08-15
    • 2021-11-13
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 2022-07-24
    • 2019-11-08
    相关资源
    最近更新 更多