我正在尝试创建GCS签名的URL:https://cloud.google.com/storage/docs/access-control/create-signed-urls-program#signing-language
我想让我的客户直接上传到GCS。但是,我遇到了经典的SignatureDoesNotMatch
错误。我认为这可能与Content-MD5摘要有关。
我对文档有疑问。在2b中,它说您可以添加MD5摘要。在下面的示例中,摘要看起来可能是base64编码的或类似的内容,但是指令中没有提及对摘要的编码。有人对此有经验吗?
编辑:在最近的运行中,我停止使用MD5摘要,并且一切正常。
答案 0 :(得分:2)
您猜对了,MD5摘要必须使用base64编码。
在创建带有MD5摘要的签名URL时,您的PUT
请求 必须 包含一个Content-MD5
标头(指定为{{3 }}。
引用标准
Content-MD5 = "Content-MD5" ":" md5-digest
md5-digest = <base64 of 128 bit MD5 digest as per RFC 1864>
MD5摘要是根据实体主体的内容计算的, 包括已应用的任何内容编码,但不包括 应用于邮件正文的任何传输编码。
签名中的MD5摘要是上面的md5-digest
(因此为base64)。
此外,这仅适用于here(不适用于POST
或可恢复的上传)。如上所述,在使用内容编码(Content-Encoding: gzip
)时应格外小心。