通过签名网址将文件放入Google Cloud Storage(GCS)

我正在尝试使用“签名的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。
  • 指定的网址参数:GoogleAccessId,签名,过期。
  • 使用Postman(Chrome扩展程序)模拟PUT请求。

但是,我仍然得到这个(状态:403禁止):

<?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时引用的。

我想念什么?任何帮助将不胜感激。

回答:

最终设法使用签名的URL将文件放入Google Cloud Storage。这是通过创建一个简单的Java程序来模拟的:

  • Server 签名并将字符串编码为签名。
  • Uploader作为未经身份验证的用户,仅使用所提供的签名来提交PUT请求Server。浏览器是使用Apache的HTTP客户端库模拟的。

您可以在此处查看演示应用程序。

我真的不明白为什么当我通过Chrome的Postman扩展程序提交时它不起作用。

以上是 通过签名网址将文件放入Google Cloud Storage(GCS) 的全部内容, 来源链接: utcz.com/qa/398050.html

回到顶部