You need to enable JavaScript to run this app. Azure存储Blob容器浏览器访问报AuthenticationFailed,无法查看Blob列表
优惠活动
大模型
产品
解决方案
定价
更多

Azure存储Blob容器浏览器访问报AuthenticationFailed,无法查看Blob列表

报错核心根因

你遇到的AuthenticationFailed错误,本质是SAS签名的绑定资源和实际访问的资源不匹配,和是否开启公共访问没有直接关系。

什么是“签名不匹配”

SAS令牌的认证逻辑是固定的:

  • 生成SAS的时候,系统会用存储账户的密钥,把「目标资源完整路径、授予权限、生效/过期时间、存储API版本、资源类型」等所有参数按Azure规定的固定格式拼成长字符串,加密计算得到sig签名值。
  • 服务端收到带SAS的请求时,会用同样的存储账户密钥,结合你实际请求的资源路径、请求里带的所有SAS参数,按完全一样的规则重新计算签名值。如果两边算出来的sig值对不上,就会抛出“Signature did not match”的错误。
    你错误详情里服务端打印的待签字符串是:
rl 2021-02-08T20:58:42Z 2021-03-09T20:58:00Z /blob/teststorageaccount21/$root 2019-12-12 c

这里面对应的目标资源是teststorageaccount21存储账户下的**$root根容器**,但你实际把这个SAS拼到了publicc自定义容器的访问链接上,相当于拿给A对象做的防伪签名去校验B对象,自然过不了认证。

为什么开了公共访问还会触发校验

Azure Blob的公共访问规则是:如果容器配置了公共读取权限,匿名请求本来不需要任何鉴权就能列出Blob列表、读取Blob内容。但只要你在请求链接里带了sig这类SAS鉴权参数,服务端就会优先走SAS校验逻辑,不会直接放通匿名访问。
你之前能正常访问单个Blob,是因为那个Blob的SAS本身就是针对MyTest1.csv正确生成的,签名和资源路径完全匹配,所以能正常通过校验。

对应解决方案

根据你的实际需求选对应操作:

  • 如果你就是要给所有用户开放公共读权限,完全不需要在链接里加任何SAS参数。直接访问容器的列表接口即可:https://teststorageaccount21.blob.core.windows.net/publicc?restype=container&comp=list,无需鉴权就能返回容器下所有Blob的列表。
  • 如果你不想开放全量公共访问,只想给指定用户发带有效期的临时访问权限,重新在存储资源管理器生成容器SAS时,注意核对:
    • 选中的目标对象必须是publicc容器,不能误选存储账户下的$root根容器
    • 权限勾选“读取”+“列表”(也就是你之前选的rl权限组合是正确的,只是选错了绑定资源)
    • 生成的SAS对应的待签路径应该是/blob/teststorageaccount21/publicc,而不是之前错误的$root路径,此时拼出的链接就不会出现签名不匹配的报错。

内容的提问来源于stack exchange,提问作者Sarah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.04 23:45:10