azure - 生成 sas 令牌时请求正文太大,超出最大允许限制
问题描述
我正在使用以下脚本使用 bash 生成 sas 令牌
sas_token=$(curl https://management.azure.com/subscriptions/$subscription_id/resourceGroups/$rg_name/providers/Microsoft.Storage/storageAccounts/$storage_account/listServiceSas/?api-version=2017-06-01 -X POST -d "{\"canonicalizedResource\":\"/blob/$storage_account/$sa_container\",\"signedResource\":\"c\",\"signedPermission\":\"rcw\",\"signedProtocol\":\"https\",\"signedExpiry\":\"$(date -d '+30 minutes' +%FT%TZ)\"}" -H "Authorization: Bearer $token" | jq -r '.serviceSasToken')
当我尝试上传一个 500mb 的大文件时,它给了我以下错误请求正文太大并且超过了最大允许限制。67108864
从上述脚本生成的 sas 令牌是:
sv=2015-04-05&sr=c&spr=https&se=2021-04-09T06%3A22%3A19.0000000Z&sp=racwdl&sig=xxxx
当我从 azure 门户生成 sas 令牌时,我得到它如下
sp=racwdl&st=2021-04-09T05:54:16Z&se=2021-04-09T13:54:16Z&spr=https&sv=2020-02-10&sr=c&sig=xxxx
在这里,如果您注意到签名版本的 sv 是 2020-02-10 并且使用此 sas 令牌,我可以上传大文件。
所以我注意到在上面的 sas 令牌中,sv 是不同的,所以我尝试在我的代码中添加签名版本,如下所示
sas_token=$(curl https://management.azure.com/subscriptions/$subscription_id/resourceGroups/$rg_name/providers/Microsoft.Storage/storageAccounts/$storage_account/listServiceSas/?api-version=2017-06-01 -X POST -d "{\"canonicalizedResource\":\"/blob/$storage_account/$sa_container\",\"signedResource\":\"c\",\"signedPermission\":\"rcw\",\"signedProtocol\":\"https\",\"SignedVersion\":\"2020-02-10\",\"signedExpiry\":\"$(date -d '+30 minutes' +%FT%TZ)\"}" -H "Authorization: Bearer $token" | jq -r '.serviceSasToken')
但它仍然会生成一个带有 2015-04-05 而不是我指定的 sv。
你能告诉我如何解决这个问题吗
解决方案
就更改签名版本参数而言,我认为您无能为力。
我的猜测是,通过存储资源提供程序 API 生成 SAS 的实现使用了存储 REST API 版本2015-04-05
(签名版本参数),如果您查看request body parameters
,您会注意到请求中没有指定签名版本参数的参数。
您可以做的一件事是更改上传实现并以块的形式上传大 blob,其中每个块的大小小于或等于 64 MB。
FWIW,存储服务版本 2016-05-31 中的块大小限制从 64 MB 更改为 100 MB:https ://docs.microsoft.com/en-us/rest/api/storageservices/version-2016-05- 31 .
推荐阅读
- angular7 - 使用esri javascript api计算两点之间的距离
- ruby-on-rails - Rails 测试错误 ActiveRecord::Fixture::FixtureError
- unit-testing - jest.mock() 使用 webpack 别名的正确配置是什么?
- c# - How to take user data for 2D array using strings and doubles in C#?
- angular - 角度导出别名
- java - 如何将单行用户输入输出到多行?
- java - 如何配置 Spring Webclient 以便能够在代理和非代理请求之间切换?
- javascript - 如何仅使用 javascript 旋转图像?
- html - 如何仅添加移动尺寸的元素?
- java - 多个类中的依赖注入?