din*_*o_d 0 amazon-s3 amazon-web-services aws-php-sdk
从 SDK 文档(链接:https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Aws.S3.S3Client.html#_createPresignedRequest)$expires中,参数应表示URL 应该过期。
因此,如果我指定 2 分钟作为过期时间,则 2 分钟后该 URL 应该无效。我的代码看起来像这样
<?php
$s3 = $this->cloudProvider->getClient(); // S3 client
$cmd = $s3->getCommand(
'GetObject',
[
'Bucket' => $this->getSdkBucket(), // Bucket name
'Key' => "$s3Name",
]
);
$urlReq = $s3->createPresignedRequest($cmd, $expirationTime); // $expirationTime is a Unix timestamp
Run Code Online (Sandbox Code Playgroud)
我得到了具有正确到期时间的网址(在我的例子中,客户端希望它是会话到期时间,而会话时间是 4 小时)
X-Amz-Content-Sha256=UNSIGNED-PAYLOAD
&X-Amz-Security-Token=long_string_goes_here
&X-Amz-Algorithm=AWS4-HMAC-SHA256
&X-Amz-Credential=another_string_goes_here
&X-Amz-Date=20200907T110127Z
&X-Amz-SignedHeaders=host
&X-Amz-Expires=14400 // This decreases depending on how long the user is logged in - max 4hrs
&X-Amz-Signature=another_string_here
Run Code Online (Sandbox Code Playgroud)
问题是这个url在4小时后才有效。
根据我在这个答案中读到的有关过期时间的内容 ( /sf/answers/4045488961/),URL的有效期为 6 小时到 7 天,具体取决于用于生成它的凭据。
我正在使用 IAM 凭证(ECS 提供商)。
那么这是否意味着无论我在到期变量中输入什么值,我都无法使链接在该时间段内有效?
过期时间由 S3 检查,如果浏览器或代理(例如,如果您使用的是 CloudFront)缓存了文件,则请求将不会到达 S3。如果它被缓存在浏览器中,那么不用担心,这意味着同一用户只能在过期后访问该 URL。
您可以使用浏览器开发工具来检查这一点。在网络选项卡上,找到对签名 URL 的请求,您可以查看它是否是从缓存(从内存/磁盘缓存)返回的。
| 归档时间: |
|
| 查看次数: |
2517 次 |
| 最近记录: |