我正在寻找让 CEPH + S3 Java SDK + 预签名的 PUT url + CORS 工作的神奇公式。我们能够创建一个存储桶,然后将 CORS 配置应用于该存储桶。然后,我们能够创建一个预先生成的 PUT url,然后我们将其发送回客户端。但是,CORS 预检(选项)请求失败并显示 403。
对于 AWS,同样的代码效果很好。但是,Swift 和 Ceph 都在 OPTIONS 请求上失败,并返回 403。由于 OPTIONS 失败,CORS 失败。我们追踪到(我们认为)RADOSGW 中创建身份验证头的方式可能存在缺陷……它与亚马逊 SDK 使用的签名过程不匹配。例如:
AWS Java auth hdr that gets signed:
PUT
image/jpeg
1404252781
x-amz-meta-origfile:Desert.jpg
/virbsupport/78946140-4638-4338-b765-6f701c453a89?response-content-disposition=attachment; filename=Desert.jpg
In Ceph:
OPTIONS
1404252781
/virbsupport/78946140-4638-4338-b765-6f701c453a89?response-content-disposition=attachment; filename=Desert.jpg
我们可以处理缺少的内容类型和其他元数据字段,但请注意 METHOD 完全错误。RADOSGW 我认为应该使用“Access-Control-Request-Method”作为签名中的方法......而不是用于预检请求的实际 OPTIONS 方法。
有没有人能够让这种组合发挥作用?