use*_*686 0 azure azure-storage-account sas-token
我已经创建了天蓝色存储帐户。我已经创建了文件存储。我已经生成了 SAS 令牌。当我尝试使用 sas 令牌访问文件时,显示错误“远程服务器返回错误:(403) 禁止。”
我能够生成 SAS 令牌。当我尝试访问文件存储中的文件时抛出异常。我尝试在浏览器上复制并粘贴网址,但会引发错误“
<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>"
Run Code Online (Sandbox Code Playgroud)
静态字符串 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,
};
Run Code Online (Sandbox Code Playgroud)
XDocument objdoc = XDocument.Load(filepath+ sasToken);
Run Code Online (Sandbox Code Playgroud)
将文件加载到 XDocument 后,我必须执行一些读写操作。请帮助查找我正在做的错误
我遇到了同样的问题,user3404686(2019-07-13)的解决方案是正确的。事后它就清楚多了,但当它仍然是一个没有解决的问题时,它可能会令人困惑。
资源类型的授权是相互独立的,而不是存在层次结构,即“服务”不包括“容器”和“对象”授权(这是我的误解)。
storageservices API 文档描述了如何分配资源类型权限:
- 服务:访问服务级 API(例如,获取/设置服务属性、获取服务统计信息、列出容器/队列/表/共享)
- 容器 (c):访问容器级 API(例如,创建/删除容器、创建/删除队列、创建/删除表、创建/删除共享、列出 Blob/文件和目录)
- 对象 (o):访问 blob、队列消息、表实体和文件的对象级 API(例如 Put Blob、查询实体、获取消息、创建文件等)
在同一文档的更下方,它提供了您可能正在使用的各种操作所需的服务、资源类型和权限的示例,从而允许使用 SA 令牌向服务分配权限所需的最小权限粒度。
了解这一点后,错误代码 AuthorizationResourceTypeMismatch 就更有意义了 - SAS 令牌被授权的资源类型与您尝试访问的资源类型不匹配。
在 SharedAccessAccountPolicy 中我已经更改
ResourceTypes =SharedAccessAccountResourceTypes.Service to
ResourceTypes = SharedAccessAccountResourceTypes.Object. Then It's working for me.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8402 次 |
| 最近记录: |