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

Azure Blob Storage SAS ExpireOn不生效问题已解决:由浏览器缓存导致

Azure Blob Storage SAS链接过期后仍可访问问题

已解决,原因为浏览器缓存

问题现象

在使用@azure/storage-blobSDK生成带有效期的Blob SAS访问链接时,expiresOn参数看似未正常生效:生成的链接可正常访问图片,但超过设置的5分钟过期时间后,链接依然可以正常打开资源。

问题相关代码

import { BlobSASPermissions, generateBlobSASQueryParameters, StorageSharedKeyCredential} from "@azure/storage-blob";

export async function BlobService2(){
  // 从环境变量读取存储配置
  const accountName = process.env.ACCOUNT_NAME;
  const containerName = process.env.CONTAINER_NAME;
  const blobName = process.env.BLOB_NAME;
  const accountKey = process.env.ACCOUNT_KEY;

  const SharedKeyCredential = new StorageSharedKeyCredential(accountName , accountKey)
  
  const blobSAS = generateBlobSASQueryParameters({
    containerName, // 必填
    blobName, // 必填
    permissions: BlobSASPermissions.parse("r"), // 只读权限
    startsOn: new Date(), // 必填,生效起始时间
    expiresOn: new Date(new Date().getTime() + 5*60000) // 设置5分钟后过期
    },SharedKeyCredential).toString();
    
  // 拼接最终访问链接
  const URL = `https://${accountName}.blob.core.windows.net/${containerName}/${blobName}?${blobSAS}`
  console.log(URL);
}

根因说明

该问题和SAS配置无关,属于浏览器静态资源缓存的正常现象:浏览器默认会缓存图片等静态资源,只要本地缓存还未过期,访问同一个资源地址时浏览器会直接返回本地缓存内容,不会实际向Azure Blob服务发起请求校验SAS有效性,因此会出现链接过期后仍可访问的假象。

验证方法

可通过以下方式排除缓存干扰,确认SAS配置实际生效:

  • 打开浏览器无痕/隐私模式访问已过期的SAS链接,会直接返回403权限错误
  • 打开浏览器开发者工具的「网络」面板,勾选「禁用缓存」后再访问过期链接
  • 使用curl、Postman等无缓存的HTTP客户端直接请求过期链接,可看到403报错

优化方案

如果需要严格控制资源访问时效,可在上传Blob时指定响应头Cache-Control: no-cache, no-store, must-revalidate,强制浏览器每次访问都向Azure Blob服务校验SAS权限,避免本地缓存导致的权限控制失效。


内容的提问来源于stack exchange,提问作者Henrique Ś.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:48:01