图像上传到 Amazon S3 存储桶。我需要得到一个预签名 URL来自亚马逊服务器。我还想设置该 URL 的到期时间。这最多只需要 17 天。但我无法设置最多 1 年的到期时间。
Calendar cal = Calendar.getInstance();
cal.add(Calendar.YEAR, 1);
Date nextYear = cal.getTime();
GeneratePresignedUrlRequest generatePresignedUrlRequest = new GeneratePresignedUrlRequest(
"bucketName", "accessname");
generatePresignedUrlRequest.setMethod(HttpMethod.GET);
generatePresignedUrlRequest
.setExpiration(nextYear);
URL url = s3client
.generatePresignedUrl(generatePresignedUrlRequest);
bucketURL = url.toString();
您不会“从服务器”“获取”预签名 URL。签名计算在客户端完成。预签名 URL 实际上是在您的计算机上计算的,而不是由服务计算的。
如果您使用的是当前的 SDK,则它可能使用的是 Signature V4。如果签名的 URL 包含X-Amz-Signature=
那么这就证实了V4。较旧的 V2 算法仅使用Signature=
在签名的 URL 中。
如果您的签名确实是 V4,那么您会看到一个故意的限制:
预签名 URL 的有效期最长为 7 天,因为您在签名计算中使用的签名密钥的有效期最长为 7 天。
http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html
如果您已经在使用 V2,则应该能够对过期时间最晚为 2038 年的 URL 进行签名。如果您正在使用 V4,则可以通过切换到使用 V2 来解决该限制,但这并不可取。较新的 S3 区域(例如法兰克福)不支持 V2,如果您按照应有的方式轮换 AWS 访问密钥,最终的密钥失效也会使使用该密钥创建的任何签名失效。
大多数情况下,更正确的方法是在需要时生成签名 URL。如前所述,该操作不需要与 S3 服务交互,并且通常可以实时完成。
如果您需要授予特定用户对“直接链接”的访问权限,请考虑在应用程序中创建一个端点,可以在其中评估用户的凭据,此时您可以生成签名 URL 并使用 HTTP 重定向浏览器302
回复。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)