我正在尝试使用“签名 URL”来访问/上传文件到 Google Cloud Storage (GCS)。
按照https://developers.google.com/storage/docs/accesscontrol#Signing-Strings上的说明进行操作
我做了什么:
- 在 Google Cloud Console 上注册了“Web 应用程序”。
- 使用已注册 Web 应用程序屏幕的“证书”部分的“生成新密钥”生成新的私钥。
- 创建了要签名的字符串,并使用页面的“如何签名”部分提供的示例代码对其进行签名(只是对 Java 主程序的硬编码值进行了细微调整)。更新:为GcsSigner.java创建了一个要点。
- 确保签名字符串是 URL 编码的。
- 指定的 HTTP 标头:x-goog-api-version、x-goog-project-id、Content-Type。
- 指定的 URL 参数:GoogleAccessId、签名、过期。
- 使用 Postman(Chrome 扩展)模拟 PUT 请求。
但是,我仍然得到这个(状态:403 Forbidden):
<?xml version='1.0' encoding='UTF-8'?>
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your Google secret key and signing method.</Message>
<StringToSign>PUT
text/plain
1384084959392
x-goog-api-version:2
x-goog-project-id:99999
/mybucket/myfile.txt</StringToSign>
</Error>
即使我根据“StringToSign”中的值对字符串进行签名重试,我仍然会收到相同的错误。
在此处阅读各种相关帖子,但找不到任何解决方案,其中大部分是指x-goog-api-version:1
我使用版本 2 时。
我错过了什么?任何帮助将不胜感激。