问题标签 [shared-access-signatures]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
629 浏览

azure - 如何使用 SAS 令牌从 C# 连接到 Azure BlobStorage?

tl;dr:我正在尝试使用 SAS 从 C# 连接到 Azure BlobStorage,但似乎无法超越StorageException“服务器无法验证请求”的说法。我怀疑我的连接字符串有问题。


我正在使用库Microsoft.Azure.Storage.Blob11.2.3.0 和Microsoft.Azure.Storage.Common11.2.3.0 从 .NET Core 3.1 应用程序连接到 Azure BlobStorage。

我建立此连接的 C# 代码如下所示:

当使用包含字段AccountNameAccountKeyEndpointSuffixDefaultEndpointsProtocol(this is https) 1的连接字符串时,这可以完美地工作。(我可以连接并执行诸如枚举容器和 blob 之类的操作,还可以创建容器和 blob 并上传数据。)


现在,我应该使用 SAS 连接到同一个 BlobStorage。为此,我得到了以下信息(这里匿名为某种“占位符”,因为我将在下面引用它们):

  • <StorageAccount>AccountName(与上述连接字符串中的字段值相同)
  • <Container>
  • <Blob-SAS-Token>
  • <Blob-SAS-URL>(这实际上由此处找到的其他信息组成,即<DefaultEndpointsProtocol>://<StorageAccount>.blob.<EndpointSuffix>/<Container>?<Blob-SAS-Token>

通过使用上述方法,我可以成功地从Microsoft Azure 存储资源管理器建立到所述 BlobStorage 容器的连接<Blob-SAS-URL>2

但是,到目前为止,我一直无法从我的 C# 代码中成功使用 SAS。

我尝试了各种方法来编写我的连接字符串,例如:

  • BlobEndpoint=<DefaultEndpointsProtocol>://<StorageAccount>.blob.<EndpointSuffix>;SharedAccessSignature=<Blob-SAS-Token>
  • BlobEndpoint=<DefaultEndpointsProtocol>://<StorageAccount>.blob.<EndpointSuffix>/<Container>;SharedAccessSignature=<Blob-SAS-Token>

根据文档,这应该有效。在那里,基于 SAS 的连接字符串被概述为包含最多五个字段 - BlobEndpointQueueEndpointTableEndpointFileEndpointSharedAccessSignature- 其中只有(任何)四个端点中的一个必须在 SAS 旁边指定。

我还尝试过创建/填充CloudStorageAccount实例,而不是通过(可能是格式错误的)连接字符串,例如:

不幸的是,无论我尝试什么,只要我尝试以这种方式从 BlobStorage 检索任何数据,Microsoft.Azure.Storage.StorageException就会抛出 a,说明

服务器未能验证请求。确保 Authorization 标头的值正确形成,包括签名。

我本地机器上的 UTC 时间与我可以在在线资源上找到的当前 UTC 时间完全匹配。因为我可以从同一台机器上的另一个应用程序连接我的 SAS 信息,所以问题很可能与环境的任何方面无关(例如在某些阻止列表或类似列表中缺少我的 IP 地址条目)。相反,我怀疑我没有提供足够的信息来建立连接。

我必须进行哪些更改才能使此连接正常工作?


1:我将在这篇文章中使用各种标识符和凭据的某种“占位符”,以免泄露任何机密信息。我希望这不会太混乱。另一方面,它实际上应该允许通过几个查找和替换操作轻松地将信息调整到可用的样本端点。

2:为此,我右键单击存储帐户树节点,然后连接到 Azure 存储... > Blob 容器> SAS URL(共享访问签名

0 投票
2 回答
71 浏览

azure - 如何以编程方式找出我可以在 blob 存储中执行哪些操作?

我正在使用库Microsoft.Azure.Storage.Blob11.2.3.0 和Microsoft.Azure.Storage.Common11.2.3.0 从 .NET Core 3.1 应用程序连接到 Azure BlobStorage。

当我开始研究这个时,我得到了连接字符串,让我可以完全访问 BlobStorage(或者更确切地说,整个云存储帐户)。基于这些,我选择“防御性地”编写我的连接代码,利用Exists()CreateIfNotExists()CloudBlobContainer中确保应用程序在容器尚不存在时不会失败。


现在,我正在使用 SAS 连接 BlobStorage 容器。虽然我可以像这样在容器中自由地检索和上传 blob,但不幸的是,似乎不允许我在容器级别上做任何事情。不仅CreateIfNotExists如此,就连对存在的单纯质疑都会Exists()抛出一句StorageException谚语。

此请求无权执行此操作。

该文档未提及该异常。

有什么方法可以先发制人地检查我是否可以检查容器的存在吗?

我曾尝试查看从 检索到的容器权限GetPermissions,但这也会引发异常。

我能看到的唯一另一种选择是检查容器是否存在于try--block中catch,如果抛出异常则假定存在......

0 投票
1 回答
93 浏览

azure - Azure IoT Hub 创建设备 API,IotHubUnauthorizedAccess;Unauthorized

一段时间以来,我一直在尝试从 Android 手机创建一个 IoT Hub 设备,尽管遵循了我能找到的所有说明或教程,但我仍然得到:

}

我已经尝试在 Android 代码中以几种不同的方式在 Java 中创建 SharedAccessSignature:

然后调用通常的方式:

我的 Sas 令牌采用以下形式:

我在 Postman 中使用的 URL 是:

将 Authorization 标头设置为上述 SAS

我还使用 Python 来创建 SAS,以防编码出现问题。但是我所做的一切都是在点击同样的未经授权的访问消息,我开始把头发拉出来。

0 投票
1 回答
43 浏览

azure - 尝试将 blob 上传到 Azure 云时出现“MD5 不是已知的哈希算法”异常?

我正在尝试使用 SAS 令牌在 Azure 中上传文件,但在尝试上传文件时收到此错误:

MD5 不是已知的哈希算法

我有这两种我使用的方法,一种是生成将用于上传文件的文件链接:

这个方法也会引发异常,它应该在 Azure 中上传文件:

在该方法的第二个方法中,UploadFromStreamAsync抛出异常。我猜该框架使用 MD5 算法,但 Azure 使用另一种加密哈希算法,但我不知道应该做什么。

0 投票
1 回答
38 浏览

azure - 使用 sas 列出 Azure Gen2 存储帐户中的文件夹

我为 datalake 存储帐户 gen2 中的文件夹生成了具有列表权限的 sas 令牌。
但是,当我尝试使用 httpGet 请求访问它时,我收到 AuthorizationPermissionMismatch 错误此请求无权使用此权限执行此操作
我知道要使用 httpRequest 列出容器,我们必须在 queryString 中添加 &comp=list&restype=container。是否有任何特定参数要添加以列出文件夹
谢谢

0 投票
1 回答
15 浏览

azure-blob-storage - 使用 SAS URL 追加到 Azure Blob

我需要不断地追加到容器中的 blob,为此我提供了 SAS URL 我正在执行此操作

但 Create 或 CreateIfNotExists 不采用 blob 名称参数。这对于创建方法来说很奇怪。

并且在使用以下内容时出现身份验证异常

我一直在阅读很多有关使用 Azure SAS 的内容,但所有内容都在谈论生成 SAS 或在非常基本的级别上停止。

感谢任何看到这个并且可以提供阅读参考或指导哪些 api 组合应该适用于这个用例的人。

谢谢,陶基尔

0 投票
1 回答
57 浏览

azure - 在 terraform 中使用 SAS 访问存储帐户

我无权访问存储帐户。我仅在容器级别获得 SAS 令牌。需要将文件(在容器中创建一个 blob)作为 terraform 中的 blob 上传到存储帐户。

这是我下面的代码。在哪里使用 SAS 令牌以便在容器中创建 blob。

如果我的存储帐户在另一个订阅中,他们是否会遵循代码块。我收到ResourceNotFound错误。

0 投票
0 回答
50 浏览

c# - 如何验证 Azure Blob 存储共享访问签名 (SAS) URL?

我的应用程序允许用户输入 Azure Blob Storage SAS URL。我将如何去验证它?我正在使用Azure Storage Blobs 客户端库,并且似乎没有任何方法可以在不实际执行 blob 操作(我不想这样做)的情况下验证 SAS URL。

验证操作可以是异步的,并且在必要时涉及 API 调用(即可以通过按钮触发)。