首页 > 解决方案 > AWSSDK 未生成新的 PreSigned URL(始终过期)

问题描述

我有一个私有存储桶,它生成在 300 秒(5 分钟)内过期的预签名 URL,总共存储了 10 个图像,但 1 个图像总是生成一个过期的 URL(它从不更新过期时间)。我尝试过在不同的计算机上使用不同的浏览器和设备,这不是缓存或临时问题。

我正在使用 AWSSDK 1.5.2.2,生成 URL 的代码如下:

public string GetPreSignedURL(string bucketName, string keyName, System.DateTime expiration)
{
    GetPreSignedUrlRequest urlRequest = new GetPreSignedUrlRequest();
    urlRequest.BucketName = bucketName;
    urlRequest.Key = keyName;
    urlRequest.Expires = expiration;
    urlRequest.Protocol = this.AwsProtocol;
    return this.S3.GetPreSignedURL(urlRequest);
}

我这样称呼它:

this.image = this.AWSManager.GetPreSignedURL(bucketName, keyName, this.GetExpireTime());

GetExpireTime() 方法是这样的:

private DateTime GetExpireTime()
{
    int expireTime;
    try
    {
        expireTime = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["expireTime"].ToString());
    }
    catch
    {
        expireTime = defaultExpireTime;
    }
    return DateTime.Now.AddSeconds(expireTime);
}

在 AWS 中存储的 10 个图像中,总是有一个,并且每次生成时返回相同 URL 的相同图像(仅在生产中发生,因此我无法调试)。我将开发环境连接到生产存储桶,并复制了数据库寄存器以查看是否可以复制问题,但在我的本地计算机上生成的 URL 很好。

这是上午 9:34 生成的 URL:

https://gtidev-masorden.s3.amazonaws.com/P4285735_thumbnail.png?AWSAccessKeyId=AKIAJTCJB4KPHVI4HTXQ&Expires=1550177695&Signature=f0Llq2syEvDvgdhxYHeedHCpD8s%3D

这是在上午 10:00 生成的:

https://gtidev-masorden.s3.amazonaws.com/P4285735_thumbnail.png?AWSAccessKeyId=AKIAJTCJB4KPHVI4HTXQ&Expires=1550177695&Signature=f0Llq2syEvDvgdhxYHeedHCpD8s%3D

我在这里比较每个生成的 URL:

https://text-compare.com/

它始终是同一个 URL,Expires 参数或 Signature 参数没有变化。当我重新上传图片时,它再次开始生成有效的网址,但几分钟后,另一张图片开始失败。

编辑:我已经请求相同的图像大约 4 天,并且到期日期是相同的。当我在新选项卡中打开 URL 时,它是这样说的:

<Error>
<Code>AccessDenied</Code>
<Message>Request has expired</Message>
<Expires>2019-02-14T20:54:55Z</Expires>
<ServerTime>2019-02-18T17:09:27Z</ServerTime>
<RequestId>C78E43335EE8E845</RequestId>
<HostId>
PPHXhK6Oj7PEKOqb8io1IcVY6mfqNM5zc89ttLylzH/DKPldIo0v8pukdW4SZmqACAVn8WSyIu0=
</HostId>
</Error>

也许我错过了一些东西,我不想更新 AWSSDK,因为其他项目依赖它。有任何想法吗?

标签: c#aws-sdkpre-signed-url

解决方案


推荐阅读