2017-10-21 172 views
5

如果我生成的Presigned URL过期了,我应该在做get_headers()(用PHP)来查看是否引发了403 Forbidden错误,否则使用相同的URL?或者这是一个坏主意,因为这是一个不必要的GET请求?我应该每次都重新生成一个新的Presigned URL吗?我有点困惑,因为似乎没有太多有关这方面的信息。Amazon S3 - 如何检查预先登记的URL是否过期?

回答

5

URL有过期时间。

签名版本2

HTT PS://bucket.s3.amazonaws.com/foo.txt AWSAccessKeyId = AKIAABCDEFGHIJK & 过期= 1508608760 &签名= XXXXXXXXXXX

到期以UTC表示时间。

$ date -d @1508608760 
Sat Oct 21 17:59:20 UTC 2017 

您可以提取价值,并将其与UTC [time()]当前时间比较,然后决定再生与否。


签名版本4

HTT PS://s3.amazonaws.com/bucket/foo.txt X-AMZ-算法= AWS4-HMAC-SHA256 & X-AMZ-到期= 3600 & X-AMZ-凭证= AKIAJRZXXXXXXXXus - 东 - 1%2Fs3%2Faws4_request & X-AMZ-SignedHeaders =宿主& X-AMZ-日期= 20171021T190750Z & X-AMZ-签名= 8b84ae9b59e9f8a8d7066ecc39e797c8dc29848abcdef61717

X-Amz-Date以ISO 8601格式给出UTC时间。

您可以提取该值,将其转换为epoch/UTC并将其与UTC [time()]中的当前时间进行比较,然后决定是否重新生成。

+1

真棒解决方案,不知道为什么我没有想到这一点。然而,对我而言,'Amz-Expires'是以秒为单位的到期时间,而'X-Amz-Date'是时间戳 –

+1

@ D-Marc'X-Amz- *'是更新的格式,称为签名版本4 AWS服务在2014年之前推出的地区支持那些加上旧风格的地区,称为签名版本2。 –