为我的项目对象启用 Google 存储签名 URL 上的 CORS

Posted

技术标签:

【中文标题】为我的项目对象启用 Google 存储签名 URL 上的 CORS【英文标题】:Enable CORS on Google Storage Signed URL for my item object 【发布时间】:2019-01-28 19:18:56 【问题描述】:

我在 Google Cloud Storage 上的存储桶中启用了 CORS;现在我为任何来源和方法添加了一个通配符 (*),但仍然收到“Origin 'https://my-app.net' is not allowed access”。

在简历中,我的存储桶中的所有对象都不是公开的,但我的服务器使用 c# Google Cloud 库向客户端返回一个签名的 URL,客户端使用 $http.get 以节省服务器带宽和内存。

如果我将 window.open 与签名的 URL 一起使用,一切正常(*用户需要允许弹出)但如果我将 $HTTP.get of angularjs 与来自浏览器的签名 URL,尽管在我的存储桶上启用了 CORS,但我收到了 CORS 错误

我确实在与签名 URL 相关的 Google 文档中看到了这一点:

如果请求的范围是子资源,例如 ?cors,请将此子资源(包括问号)添加到字符串的末尾。

请务必按字面意思复制 HTTP 请求路径:也就是说,您应该 在您输入的字符串中包含所有 URL 编码(百分号) 创建。此外,请确保您仅包含查询字符串参数 指定子资源(例如 cors)。你不应该包括 查询字符串参数,例如 ?prefix、?max-keys、?marker 和 ?分隔符。

这是启用带有签名网址的 CORS 的某种设置吗?我可以使用 c# Google Cloud Storage 库来实现这一点吗?

【问题讨论】:

【参考方案1】:

好的,我找到了为什么它不起作用。

首先,我建议任何对 CORS 有问题的人用一个简单的项目对其进行测试。我做了一个简单的 Angular 6 项目,我能够使用“http.get”下载我的 PDF。

这就是我们遇到的问题;我们目前有一个拦截器服务,它为所有请求附加一个“授权”标头。

我对任何包含“storage.googleapis”的请求做了一个例外处理,以不包含“授权”标头。现在一切正常,与签名的 URL 无关,签名的 URL 很好。

【讨论】:

以上是关于为我的项目对象启用 Google 存储签名 URL 上的 CORS的主要内容,如果未能解决你的问题,请参考以下文章

如何启用 Google Play 应用签名

Android Google+登录问题

带有 Google 存储的 C# - 带有客户加密密钥的签名 URL

如何在本地创建签名与我在 Playstore 上的应用兼容的 APK(使用 Google 的应用签名)?

如何在没有AppEngine for Google云端存储的情况下获取服务网址?

使用 AlamoFire 和预签名 URL 将图像上传到 S3 存储桶时出现问题