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

Laravel9 Azure Blob SAS读文件报AuthorizationPermissionMismatch

问题根因

报错核心原因是当前使用的SAS Token权限不足:

  • 你生成的SAS Token仅配置了Read(读)权限,这个权限只支持直接读取已知完整路径的单个Blob文件,和你测试“直接拼接SAS访问单个文件URL可以正常打开”的现象完全匹配。
  • 测试代码里调用的$disk->files($path)是列出容器下Blob文件列表的操作,这个操作需要SAS Token额外具备List(列表)权限,没有该权限就会抛出AuthorizationPermissionMismatch错误。
  • 移除SAS Token配置后,扩展包会默认使用存储账户的访问密钥走账户级鉴权,具备容器的全部操作权限,所以可以正常读取文件列表。

另外配置文件里重复写了两行'driver' => 'azure'属于冗余配置,虽然不触发报错,但建议清理。

解决步骤
  • 重新生成容器级SAS Token:在存储账户的容器共享访问签名配置页,除了已勾选的读取权限,额外勾选**列表(List)**权限;如果后续需要通过该磁盘做文件上传、删除操作,还要对应勾选写入、删除等所需权限,确认SAS的生效时间、过期时间、允许访问的网络范围配置正确后生成新的Token。
  • 修正Laravel侧配置:
    1. 删掉配置中重复的'driver' => 'azure'行
    2. 检查填入环境变量的SAS Token值,不要携带URL参数前缀的?符号(如果复制出来的SAS串开头是?sp=r&...,要把开头的?删掉,只保留后面的参数内容)
      最终正确的磁盘配置参考:
'azure' => [
    'driver'    => 'azure',
    'sasToken'  => env('AZURE_STORAGE_SAS_TOKEN'),
    'container' => env('AZURE_STORAGE_CONTAINER'),
    'url'       => env('AZURE_STORAGE_URL'),
    'prefix'    => null,
    'endpoint'  => env('AZURE_STORAGE_ENDPOINT'),
    'retry'     => [
        'tries' => 3,
        'interval' => 500,
        'increase' => 'exponential'
    ],
],
  • 清除配置缓存后验证:执行Artisan命令php artisan config:clear清空Laravel的配置缓存,再访问测试路由即可正常获取文件列表。

补充提示:如果业务场景不需要遍历、列出容器内的文件,只需要读取已知完整路径的单个文件,保留现有仅带Read权限的SAS也可以正常使用$disk->get('文件完整路径')方法读取文件,不需要额外加List权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 04:45:37