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

时间:2018-12-26 22:18:35

标签: rest azure azure-storage

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

  • 确定不是blob的存储帐户;只是一般。我确定我需要通用文件,这样我就可以直接创建文件了。
  • 在其中创建了文件共享。
  • 使用Azure Storage Explorer,右键单击该文件共享,然后选择“获取共享访问签名”。
  • 检查读取,写入,列出和创建。
  • 这给了我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对象,则会收到经常看到的错误,表明服务器无法验证请求。确保包括签名在内的Authorization标头的值正确形成。签名不匹配。要使用的签名字符串是rwl 2018-12-25T16:29:51Z 2018-12-29T16:29:00Z / file / cs7f0fbc5104d4ax435dx883 / $ root 2018-03-28
  • 尝试按照建议的here添加comp=list&restype=container。不高兴。
  • 确保我没有正在使用的访问策略。
  • 转到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表示什么。

非常困惑,正在寻找建议。

对于任何将来的读者,令人困惑的扩展事件会话(因为他们写了文件)需要blob容器,而不是常规/文件/队列容器。至少我只能让他们那样工作。

1 个答案:

答案 0 :(得分:1)

您可能对SAS URL的显示方式感到困惑。实际上,您获得的SAS URL仅提供了有关如何使用SAS令牌的示例,它们不能直接使用。因此,您看到了这些错误。

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

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

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

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

    它的格式为fileEndPoint/?SASToken。同样,我们需要补充网址以使其有效,即fileEndPoint/fileShareName/fileName?SASToken。请注意,由于选中了所有选项,因此此SASToken对所有存储资源都具有所有权限。

    sco表示我们有权对服务,容器和对象进行操作,这表明了权限的范围,请查看doc以获取详细信息。

我对Azure SQL扩展事件会话不熟悉,但是如果您只需要处理一个文件共享中的文件,那么1st就足够了。