拥有Azure存储帐户的共享访问签名,是否可以检查其有效期?
我可以从?sv=2018-03-28&si=mypolicy&tn=mytable&sig=ABC...
到它的expiration Time吗?
如果您在SAS令牌中指定了SAS过期值,那么您可以通过解析令牌并查看se
参数的值来查找。当你的SAS令牌到期时,这将以UTC给出一个日期/时间值。
但是,如果您在SAS令牌中没有SAS过期值(您正在使用访问策略,并且过期在访问策略本身中定义),那么事情就会变得棘手。
你可以做两件事:
- 如果您可以访问帐户名和密钥,则可以获取blob容器的访问策略,查看特定的访问策略并查找到期日期。
- 是一种反模式,但您可以执行该操作并捕获异常(如果有的话)。如果你的SAS令牌过期了,你会得到一个
AuthenticationFailed
异常。您可以检查AuthenticationErrorDetails
,以确定是否由于令牌过期而导致身份验证失败。
例如,我试图使用过期的SAS令牌列出blob容器中的blob,并得到以下响应:
<Error>
<Code>AuthenticationFailed</Code>
<Message>Server failed to authenticate the request. Make sure the value of Authorization header is formed correctly including the signature. RequestId:11111111-1111-1111-1111-111111111111 Time:2021-03-08T04:53:44.1329974Z</Message>
<AuthenticationErrorDetail>Signed expiry time [Sun, 28 Feb 2021 18:30:00 GMT] must be after signed start time [Mon, 08 Mar 2021 04:53:44 GMT]</AuthenticationErrorDetail>
</Error>