我已经创建了一个Azure存储帐户。我已经创建了文件存储。我已经生成了SAS令牌。当我尝试使用显示错误的sas令牌访问文件时,“远程服务器返回错误:(403)禁止。”
我能够生成SAS令牌。当我尝试访问文件存储中的文件时抛出异常。我试图将URL复制并粘贴到浏览器时抛出错误“
<Error>
<Code>AuthorizationResourceTypeMismatch</Code>
<Message>
This request is not authorized to perform this operation using
this resource type. RequestId:4cbc0cbe-401a-00c2-2edf-
202bc4000000 Time:2019-06-12T05:26:39.4816687Z
</Message>
</Error>"
静态字符串GetAccountSASToken()
SharedAccessAccountPolicy policy = new
SharedAccessAccountPolicy()
{
Permissions = SharedAccessAccountPermissions.Read |
SharedAccessAccountPermissions.Write |
SharedAccessAccountPermissions.List,
Services = SharedAccessAccountServices.File,
ResourceTypes = SharedAccessAccountResourceTypes.Service,
SharedAccessExpiryTime = DateTime.UtcNow.AddHours(24),
Protocols = SharedAccessProtocol.HttpsOnly,
};
XDocument objdoc = XDocument.Load(filepath+ sasToken);
将文件加载到XDocument之后,我必须执行一些读写操作。请帮助发现我正在做的错误
答案 0 :(得分:1)
我遇到了同样的问题,来自user3404686 (2019-07-13) 的解决方案是正确的。事后就清楚多了,但是当问题还是没有解决的时候,就会莫名其妙。
资源类型是相互独立授权的,而不是有层次结构,即“服务”不包括“容器”和“对象”授权(这是我的误解)。
storageservices API documentation 描述了如何分配资源类型权限:
<块引用>在同一文档的进一步下方,它提供了您可能正在使用的各种操作所需的服务、资源类型和权限的示例,允许使用 SA 令牌将权限分配给服务的最低要求权限粒度.
了解这一点后,错误代码 AuthorizationResourceTypeMismatch 更有意义 - SAS 令牌授权的资源类型与您尝试访问的资源类型不匹配。
答案 1 :(得分:0)
在SharedAccessAccountPolicy中,我已更改
ResourceTypes =SharedAccessAccountResourceTypes.Service to
ResourceTypes = SharedAccessAccountResourceTypes.Object. Then It's working for me.