Azure存储账户C#代码设置SAS过期时间超1年报错,设10000年失败求助
Azure SAS设置10000年过期时间不可行,原因及解决办法
报错原因
这个操作确实不可行,问题来自两个层面的限制:
- .NET类型范围限制:
DateTimeOffset的有效取值区间是公元0001年1月1日到9999年12月31日。调用AddYears(10000)会让计算后的时间超出这个范围,直接触发The added or subtracted value results in an un-representable DateTime错误。 - Azure存储服务限制:就算绕开.NET的限制,Azure存储本身也不支持过期时间晚于
9999-12-31T23:59:59Z的SAS令牌。
可行的解决办法
1. 设置最大允许的过期时间
如果需要尽可能久的有效期,可以直接把过期时间设为DateTimeOffset的最大值(这也是Azure存储允许的上限):
BlobSasBuilder sasBuilder = new BlobSasBuilder() { ExpiresOn = DateTimeOffset.MaxValue };
也可以手动指定9999年的最后一刻:
BlobSasBuilder sasBuilder = new BlobSasBuilder() { ExpiresOn = new DateTimeOffset(9999, 12, 31, 23, 59, 59, TimeSpan.Zero) };
2. 采用更适合长期访问的方案
如果需要近乎永久的访问权限,SAS并不是最优选择,推荐以下方式:
- Azure AD托管标识:给访问资源的应用或服务分配托管标识,通过RBAC配置权限,无需管理令牌过期,安全性也更高。
- 存储账户级SAS:创建账户级别的SAS令牌,同样可以设置到9999年过期,且能访问存储账户下的Blob、文件等多种资源类型。
内容的提问来源于stack exchange,提问作者user21940304
相关产品推荐
相关产品推荐

