COS - IBM Cloud - .NET - 生成的预签名 URL

问题描述 投票:0回答:1

有某种方法可以为 ibm cloud 中的云对象存储生成预签名 url?

我使用 java 进行了示例测试,它生成了一个有效的 url,并且生成了像 X-Amz-Algorith 这样的查询参数...

但是当我尝试使用 .NET 执行相同操作时,首先,我必须使用适用于 S3 的 aws sdk 进行管理,并且我可以执行上传/下载等操作,但是 generatedpresigned url 方法会为我生成一个具有不同查询参数的 url,并且如果我尝试使用它进行下载(例如)它不起作用(我总是得到 403 - 禁止)。

当我使用 .NET AWS S3 nuget 创建预签名 url 时生成的查询参数值包含以下参数:

  • AWSAccessKeyId=<>
  • 过期=<>
  • 签名=<>

但是使用 Java 和 com.ibm.cloud.objectstorage.services.s3.model,我恢复查询参数,例如:

  • X-Amz-算法
  • X-Amz-日期
  • X-Amz-签名标头
  • X-Amz-过期
  • X-Amz-Credential -> 与.net解决方案的accesskey不同(包含字符串中可读的元信息)
  • X-Amz-Signature -> 不同(长度)

需要知道:

  • 是否有.NET core的解决方案
    • 特别套餐
    • api休息方式
    • 等等
  • 如果我可以“映射”一个网址来执行与正确网址类似的操作(如果参数可能是等效的)。
.net amazon-s3 ibm-cloud pre-signed-url ibm-cloud-storage
1个回答
0
投票

创建预签名 URL 时生成的查询参数值 使用 .NET AWS S3 nuget 包含以下参数:

AWSAccessKeyId=<> 过期=<> 签名=<>

这表明您正在使用 SigV2 而不是 SigV4。 SigV2 使用

Expires
等查询参数,而 SigV4 和 SigV4A 使用
X-Amz-Expires
。您可能配置为使用
us-east-1
,AWS .NET SDK 将其视为区域终端节点,因此默认使用 SigV2。尝试直接在客户端中明确设置您的区域或通过
AWSConfigsS3
对象

明确设置签名版本

明确设置区域:

var s3Client = new AmazonS3Client(RegionEndpoint.UsWest1);

如果您必须通过配置使用 us-east-1,则强制使用 SigV4:

AWSConfigsS3.UseSignatureVersion4 = true;

如果您确实想知道为什么 AWS .NET SDK 对 us-east-1 使用 SigV2,以下是 aws .NET SDK 首席工程师的解释:

出于 us-east-1 遗留原因,.NET SDK 使用 SigV2。最后一个专业 .NET 版本于 2015 年发布,当时 SigV4 还处于早期阶段 而S3甚至还不支持它。对于任何其他服务或地区,我们 可以在不进行任何重大更改的情况下更换签名版本,但是 因为 .NET SDK 将 us-east-1 本质上视为 S3 全局 端点我们无法将 us-east-1 的 S3 更改为 SigV4。

通过全局端点,如果您的客户端使用 s3.amazonaws.com 端点, .NET SDK 为 us-east-1 所做的事情,您可以提出请求 其他区域(例如 us-west-2)的存储桶。这就是 S3 的设计,因为 去了多地区。随着 SigV4 的引入,这种行为得到了 复杂,因为需要存储桶所在的区域 创建 SigV4 签名。在正常的SDK API中调用SDK 当它切换到 SigV4 时通过首先签名来保持兼容性 us-east-1 当它发出请求时,它会检测该请求是否 由于区域不匹配而失败,将请求提交给 S3 返回正确的区域,然后再次发出请求。那里 涉及缓存,因此 SDK 仅执行此双跳一次。在里面 对于预签名 URL,SDK 不参与处理此错误 并重定向案例。为了避免破坏任何用户,SDK 一直使用 us-east-1 默认使用 SigV2。

由于预签名 URL 的创建是在没有任何网络调用的情况下完成的 我们不可能知道如果我们这样做的话这会影响多少用户 更改了签名版本。无法测量爆炸 radius 我们从未对更改签名版本感到舒服 无需进行主要版本更新。如果我们做了一个主要版本升级,我们 会进行此更改,但没有计划进行主要版本升级 在不远的地平线上。

© www.soinside.com 2019 - 2024. All rights reserved.