Azure Blob 存储 SAS 令牌未按预期过期

Azure Blob Storage SAS Token dose not expire as expected

我的应用程序生成 SAS 令牌以访问我的容器中的现有 blob。但是,我的 SAS 令牌看起来并没有过期。在我声明的过期时间之后,我能够从容器中查看和获取 blob。

这是代码:

  public string GenerateSasToken([NotNull] string containerName, [NotNull] string blobName)
    {
        var startTime = DateTimeOffset.UtcNow
        var expiredTime = startTime.AddSeconds(20);

        var blobClient = new BlobClient(_options.Value.ConnectionString, containerName, blobName);
        var sasBuilder = new BlobSasBuilder(BlobContainerSasPermissions.Read, expiredTime)
        {
            BlobName = blobName,
            BlobContainerName = containerName,
            StartsOn = startTime,
            ExpiresOn = expiredTime
        };
        var uri = blobClient.GenerateSasUri(sasBuilder);
        return uri.ToString();
    }

生成的令牌有效,我可以使用它,但它不会在 20 秒后过期,实际上即使在 15 分钟后它也不会过期。

我在这个 API 中遗漏了什么吗?

谢谢!

编辑:

我正在附加生成的 SAS 令牌。

?sv=2020-08-04&st=2022-01-24T21%3A20%3A41Z&se=2022-01-24T21%3A21%3A01Z&sr=b&sp=r&sig=signature-here

即使 SAS 令牌已过期,由于浏览器缓存,您仍然可以使用相同的 SAS 令牌访问 blob 存储

为了避免这种情况,您可以按照@Gaurav Mantri

的建议覆盖 SAS 令牌中的 cache-control header

您需要在 BlobSasBuilder 函数中设置 CacheControl 值以覆盖 cache-control header

您的 BlobSasBuilder 函数可以如下所示:

var sasBuilder = new BlobSasBuilder(BlobContainerSasPermissions.Read, expiredTime)
        {
            BlobName = blobName,
            BlobContainerName = containerName,
            StartsOn = startTime,
            ExpiresOn = expiredTime,
            CacheControl = "max-age=" + expiredTime
        };