有没有办法重新生成 Azure Blob 存储 SAS 令牌

Posted

技术标签:

【中文标题】有没有办法重新生成 Azure Blob 存储 SAS 令牌【英文标题】:Is there a way to regenerate Azure Blob Storage SAS token 【发布时间】:2021-11-08 19:34:49 【问题描述】:

我使用 azure-sdk-for-js (NodeJS)。 特别是 - @azure/storage-blob@12.6.0。

我有一个生成 SAS 令牌的服务,它们会在几分钟后过期。我想在上次过期后以某种方式请求新令牌。即使在操作过程中也应该这样做。因为当我将大文件上传到 blob 时,中间 SAS 令牌过期并且上传失败。

我有一个我需要的工作示例,但使用 EventHub。 我创建事件中心客户端:

new EventHubProducerClient(eventHubHost, eventHubName, sasGenerator)

sasGeneratorTokenCredential 的实现。它返回生成的AccessToken(具有 SAS 令牌和 expiresOnTimestamp)。如果我理解正确,EventHubProducerClient 在需要时使用我的sasGenerator 刷新令牌。

我发现BlobServiceClient 有类似的参数credential 可以有TokenCredential 的类型。但是与 EventHub 相同的方法不起作用:

new BlobServiceClient(blobHost, sasGenerator)

错误示例:

RestError: Server failed to authenticate the request. Please refer to the information in the www-authenticate header

我还能够将生成的 SAS 令牌与AnonymousCredential 一起使用,并且可以正常工作。但我无法将大文件上传到 blob,因为令牌提前过期。

【问题讨论】:

【参考方案1】:

请检查以下几点,如果它们可以解决

    错误Server failed to authenticate the request. Please refer to the information in the www-authenticate header 可能是由于存储在配置文件或连接字符串中的帐户名/密钥存在问题。 这可能是由于权限顺序不正确。请参阅Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature. 和valid permission order。

    遇到了这个 Article 关于如何为持续上传注入新 SAS 的信息。 该方案提供了在上传期间请求新 SAS 令牌而不是开始新上传的示例。

见:

    work-with-shared-access-signatures Best practices using sas

【讨论】:

请停止发布文章链接,您的答案中没有实际内容。在您的答案中发布任何相关代码、解释等,并且仅包含链接作为附加资源。 文章在上传期间自定义 HTTP 管道和策略以动态注入 SAS 中描述的方法应该可以工作,尽管它是为旧版本的 azure blob 存储库编写的,所以你目前需要移植它。我在github.com/Azure/azure-sdk-for-js/issues/17836 记录了一个文档和示例改进问题

以上是关于有没有办法重新生成 Azure Blob 存储 SAS 令牌的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法从本地 Azure Blob 存储批量插入?

将多个 Blob 上传到 Azure 存储

有没有办法通过 Javascript 删除 Azure Blob 容器文件?

将 Microsoft 无状态服务绑定到 Azure 存储 Blob?

blob 在 Azure 存储帐户中保留多长时间?

使用 Nodejs 将文件从 Azure 存储 blob(容器)复制到 Azure 文件共享