You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过SAS URI访问Azure Blob时Authentication failed错误排查

Azure Blob Storage SAS URI 签名错误排查与解决事项

问题背景

我们团队使用NextJS开发Web应用,近期集成Azure Blob Storage实现文件上传与展示。负责前端图片展示模块时,通过generateBlobSASQueryParameters函数生成SAS令牌,参数包含容器名、Blob名、startsOn(日期对象)、expiresOn(日期对象),权限设置为BlobSASPermissions.parse("racwdt")。生成SAS URI后访问时,收到错误:服务器无法验证请求,签名字段格式不正确。

错误的SAS URI:

https://mystorageaccount.blob.core.windows.net/images/example.png?sv=2021-06-08&ss=bfqt&srt=sco&sp=rwdlacupiytfx&se=2022-11-22T20:45:23Z&st=2022-10-03T11:45:23Z&spr=https&sig=ECjnJEvZCOPhvuOgCsGBMIwone7VmsiJQopVNyb4yB0%3D?sv=2021-06-08&st=2022-10-06T06%3A24%3A12Z&se=2022-10-06T06%3A34%3A12Z&sr=b&sp=racwdt&sig=ioMMCIFo0eXC%2BTZ9yDZB9D5JHz%2F%2BUyMMFqTPEG0QSqg%3D

失败URL提取的参数:

sv=2021-06-08
ss=bfqt
srt=sco
sp=rwdlacupiytfx
se=2022-11-22T20:45:23Z
st=2022-10-03T11:45:23Z
spr=https
sig=ECjnJEvZCOPhvuOgCsGBMIwone7VmsiJQop

注:通过Blob的「生成SAS令牌和URL」按钮手动生成的SAS URI可正常访问。

解决注意事项

  • 禁止重复拼接SAS参数:从错误URI可见,末尾重复追加了一整套SAS参数(第二个?后的内容),导致参数冲突、签名验证失败。正确做法是:Blob基础URL后仅拼接一次generateBlobSASQueryParameters返回的完整查询字符串,不要叠加重复参数。
  • 保证签名参数完整:失败参数中的sig被截断(原生成的sig=ECjnJEvZCOPhvuOgCsGBMIwone7VmsiJQopVNyb4yB0%3D变成sig=ECjnJEvZCOPhvuOgCsGBMIwone7VmsiJQop),签名是完整的Base64编码字符串,截断后必然触发验证失败。需检查拼接过程中是否存在字符截断、URL编码错误。
  • 对齐资源类型与权限范围:手动生成的SAS包含sr=b(指定资源类型为Blob),而代码生成的参数缺少该字段,同时权限sp值也不匹配(代码用racwdt,错误URL中是rwdlacupiytfx)。需确保代码中指定resource参数为'b'(Blob级SAS),权限字符串与实际需求一致,避免冗余权限导致签名计算不匹配。
  • 统一日期格式与时区:startsOn和expiresOn必须采用UTC时间格式(ISO 8601,如YYYY-MM-DDTHH:mm:ssZ),确保代码中日期对象正确转换为UTC时间,避免本地时区偏差引发签名验证失败。
  • 确认存储服务版本兼容:检查代码中使用的sv版本(2021-06-08)与Azure存储账户支持的版本一致,同时generateBlobSASQueryParameters的参数要符合所选版本的要求,部分版本对权限字段格式有严格限制。
  • 校验签名计算的参数完整性:SAS签名基于所有指定参数(容器名、Blob名、权限、起止时间、服务版本等)生成,任何参数遗漏或错误都会导致签名不匹配。对比手动生成的SAS参数,确保代码传入generateBlobSASQueryParameters的所有参数与手动生成时一致(如spr=https是否正确设置、srt/ss是否符合需求)。

内容的提问来源于stack exchange,提问作者Ariel K.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 12:40:33