You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用AWS SDK .NET生成Cloudflare R2预签名URL遇SigV2不支持错误

解决Cloudflare R2预签名URL生成的SigV2不支持错误

问题原因

你遇到的错误SigV2 authorization is not supported. Please use SigV4 instead,核心原因是Cloudflare R2仅支持SigV4签名算法,完全弃用了老旧的SigV2。而AWS SDK的GetPreSignedURL方法默认会使用SigV2生成签名,导致R2直接拒绝请求。

关于你提到的文档误解:Cloudflare R2是支持SigV4的,官方文档中明确说明的是不支持SigV2,你可能看反了描述。另外GetObjectAsync能正常工作,是因为该方法在SDK中默认使用了SigV4签名,无需额外配置。

解决方案

修改S3客户端配置,强制指定使用SigV4签名版本,同时需要设置区域端点(R2兼容us-east-1或你实际使用的R2区域):

修改后的完整代码

private static AmazonS3Client GetS3Client()
{
    var credentials = new BasicAWSCredentials(accessKey, secretKey);
    return new AmazonS3Client(credentials, new AmazonS3Config
    {
        ServiceURL = "你的R2存储桶端点",
        SignatureVersion = SignatureVersion.SigV4,
        // R2兼容us-east-1,若你的R2有指定区域可替换为对应RegionEndpoint
        RegionEndpoint = RegionEndpoint.USEast1
    });
}

public static string GeneratePreSignedUrl(string fileName, TimeSpan expiry, string bucketName)
{
    using (AmazonS3Client client = GetS3Client())
    {
        var request = new GetPreSignedUrlRequest
        {
            BucketName = bucketName,
            Key = fileName,
            Verb = HttpVerb.GET,
            Expires = DateTime.UtcNow.Add(expiry),
            // 可选:显式指定签名版本,确保客户端配置生效
            SignatureVersion = SignatureVersion.SigV4
        };

        return client.GetPreSignedURL(request);
    }
}

关键配置说明

  • SignatureVersion = SignatureVersion.SigV4:强制SDK使用SigV4生成签名,完全匹配R2的授权要求
  • RegionEndpoint:SigV4签名必须依赖区域信息,R2默认兼容us-east-1,如果你的R2存储桶有指定区域(如eu-central-1),请替换为对应的RegionEndpoint值

内容的提问来源于stack exchange,提问作者SpicyCatGames

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 10:08:10