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
};