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

从Gen2数据湖获取数据遇认证错误,请求协助排查

解决Azure Gen2存储账户SAS认证失败问题

针对你遇到的Blob创建触发Azure Function后,使用SAS Token获取Blob数据时出现的Server failed to authenticate the request. Make sure the value of the Authorization header is formed correctly including the signature错误,我结合你提到的细节,整理了几个关键排查和解决方向:

1. 先检查SAS的核心配置(最可能的问题)

先看你提供的SAS示例,这里有几个明显的问题:

  • 权限缺失:sp=kwdmacusx参数里没有包含读取权限r,要获取Blob数据,必须把权限改成sp=rwkdmacusx(添加r)。很多时候权限不足会被误报为签名错误,这是最容易忽略的点。
  • 时间过期:st=2020-05-10T06:36:06Z是SAS的起始时间,现在早就超过这个时间范围了!生成SAS时必须确保当前时间在st(起始时间)和se(结束时间)之间,否则SAS直接失效。
  • 服务参数错误:ss=mfat是无效的服务值,针对Blob存储应该设置为ss=b(Blob服务)或ss=bf(Blob+File服务)。

2. 确认SAS Token的拼接格式是否正确

你试过用?和&作为起始字符,但要严格分场景:

  • 如果事件传递的Blob地址是纯净的(比如https://xxx.blob.core.windows.net/container/myfile.txt,没有任何查询参数),SAS必须以?开头,拼接后是https://xxx.blob.core.windows.net/container/myfile.txt?sv=...
  • 如果Blob地址已经带有查询参数(比如https://xxx.blob.core.windows.net/container/myfile.txt?someparam=value),SAS才需要以&开头,拼接成https://xxx.blob.core.windows.net/container/myfile.txt?someparam=value&sv=...
    建议直接把拼接后的完整URL复制到浏览器里测试,如果浏览器也报错,说明SAS本身有问题,和Function代码无关。

3. 排查存储账户的SAS禁用限制

你提到Storage Explorer中“Get shared access signature”功能被禁用,这说明存储账户很可能开启了禁止共享密钥访问的配置:

  • 登录Azure门户,找到你的Gen2存储账户,进入「配置」页面
  • 查看「允许使用共享密钥」选项,如果设置为「否」,那么账户级SAS将无法使用,这时候你有两个选择:
    • 如果业务允许,将「允许使用共享密钥」改为「是」,重新生成符合要求的账户级SAS
    • 如果必须禁用共享密钥(符合安全最佳实践),改用用户委派SAS:给Azure Function的托管标识分配Storage Blob Data Contributor角色,然后通过Azure AD身份生成用户委派SAS(这种方式不需要共享密钥,更安全)

4. 检查Function中的调用方式

如果你是手动调用REST API获取Blob,注意不要把SAS Token放到Authorization请求头里!SAS认证是通过URL参数传递的,正确的做法是直接把SAS拼接到Blob URL后面,然后发起GET请求即可。如果使用Azure Storage SDK,确保SDK版本适配你的存储账户版本,并且正确传入SAS Token。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 17:02:38