rest - 无法为 Azure 文件创建有效的共享访问签名

标签 rest azure azure-storage

我需要创建 SAS,以便可以创建 Azure SQL 扩展事件 session 。事件 session 需要通过 SAS 的文件数据存储目标,但我无法创建一个有效的目标。这是我尝试过的:

  • 识别出一个不是 blob 的存储帐户;只是一般。我很确定我需要 General,以便我可以直接创建文件。
  • 已在其中创建文件共享。
  • 使用 Azure 存储资源管理器,右键单击该文件共享并选择“获取共享访问签名”。
  • 选中“读取”、“写入”、“列出”并创建。
  • 这给了我 URL https://mystorageacct.file.core.windows.net/xevents?st=2018-12-25T16%3A29%3A51Z&se=2018-12-29T16%3A29%3A00Z&sp=rwl&sv=2018-03-28&sr=s&sig=mysig
  • 如果我只是尝试跟踪此 URL 或在代码中使用它创建一个 CloudFile 对象,我会收到常见的错误,服务器无法验证请求。确保授权 header 的值格式正确,包括签名。签名不匹配。使用的签名字符串为 rwl 2018-12-25T16:29:51Z 2018-12-29T16:29:00Z/file/cs7f0fbc5104d4ax435dx883/$root 2018-03-28
  • 尝试按照建议添加 comp=list&restype=container here 。没有喜悦。
  • 确保我没有使用任何访问策略。
  • 转至 Azure 门户并在存储帐户级别创建了不同的 SAS(找不到在文件共享上创建它的方法)。这给了我这个“文件服务 SAS URL”:https://mystorageacct.file.core.windows.net/?sv=2018-03-28&ss=bfqt&srt=sco&sp=rwdlacup&se=2018-12-30T01:25:16Z&st=2018-12-26T17:25:16Z&spr=https&sig=mysig
  • 如果我尝试使用该 URL,请求 URI 中指定的查询参数之一的值无效。我不知道哪个参数有问题,它们对我来说看起来很好,但是我不知道值 srt=sco 表示什么。基于this doc srt 是资源类型,但我不知道值 sco 表示什么。

很困惑,寻求建议。

对于任何 future 的读者来说,扩展事件 session 令人困惑(因为它们写入文件)需要 blob 容器,而不是通用/文件/队列容器。至少我只能让他们那样工作。

最佳答案

您可能对 SAS URL 的呈现方式感到困惑。事实上,您获得的 SAS URL 只是提供了如何使用 SAS token 的示例,不能直接使用它们。因此您看到了这些错误的发生。

  1. 服务级别 SAS URL,即您从 Storage Explorer 获取的 URL。

    其格式为fileEndPoint/fileShareName?SASToken。 SASToken 授予我们对指定文件共享内的所有文件进行操作的权限。要利用 token ,我们需要在 URL 中添加 fileName,即 fileEndPoint/fileShareName/fileName?SASToken

    comp=list&restype=container 用于列出 Blob 容器中的 Blob,而不是用于文件共享。

  2. 帐户级 SAS URL,您从 Azure 门户获得的 URL。

    格式为fileEndPoint/?SASToken。同样,我们需要补充 URL 以使其有效,即 fileEndPoint/fileShareName/fileName?SASToken。请注意,此 SASToken 具有所有存储资源的所有权限,因为所有选择均已检查。

    sco表示我们有对服务、容器、对象进行操作的权限,表示权限范围,查看doc了解详情。

我不熟悉 Azure SQL 扩展事件 session ,但如果您只需要处理一个文件共享中的文件,第一个就足够了。

关于rest - 无法为 Azure 文件创建有效的共享访问签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53937750/

相关文章:

actionscript-3 - 使用BlazeDS和AS3的URLLoader将AMF作为REST格式

api - Jira REST API : create issue linked to another one

c# - 通过 C# 访问 Azure DevOps 工作元素

azure 。如何在高可用 Web 服务器之间共享文件

java - 判断api请求是来自CURL还是POSTMAN?

java - Spring OAUTH - web e REST的不同登录

azure - Terraform StorageProfile.dataDisks.lun 没有存储配置文件中指定的图像所需的值

azure - 从不同订阅访问 Azure 存储服务

Azure 安全中心使用过多存储空间

mongodb - 将集合中的所有文档从 mongodb 移动到 azure blob 存储