如何在 AWS Lambda 上为 Google 没有 MD5 校验和的云存储上传 (PUT) 签名 URL

How to sign URL for Google Cloud Storage upload (PUT) without MD5 checksum on AWS Lambda

我正在尝试在 AWS Lambda 中生成签名的 URL 以将 object 上传(放置)到 GCS。

我有这段代码 (http://dpaste.com/20QWFRG) from various examples, and it works as is. But as soon as I remove MD5 checksum from being passed a header while signing, which is supposed to be optional (https://cloud.google.com/storage/docs/access-control/signing-urls-manually),它给我错误。

这是相同的代码,但没有将 MD5 校验和作为 header 传递,它 不起作用 http://dpaste.com/2ZH1VVP

删除 Content-MD5 是一个非常糟糕的主意™。它在技术上是可选的,但它不应该是,因为它对数据完整性至关重要。

但如果您坚持...您的签名代码的问题是您正在删除 空白行,该行位于负载 MD5 散列本应位于的位置。

Note: After each step of the string construction, add a newline to the string (\n).

https://cloud.google.com/storage/docs/access-control/signing-urls-manually

所以你需要...

signature_string = ('{verb}\n'
                    '\n'
                    '{content_type}\n'
                    ...

要签名的字符串始终具有相同数量的 \n 分隔行,即使某些行为可选值留空也是如此。

因为待签名字符串被用作 HMAC 的输入然后被丢弃,所以服务无法允许与确切格式的偏差,无论偏差有多大。