【发布时间】:2018-04-04 18:27:19
【问题描述】:
只需将存储桶命名为与我的域名相同的名称,然后将 CNAME 记录指向 c.storage.googleapis.com,我就能够将自定义域名映射到我的 Firebase Storage 存储桶。但是,https 不起作用,因为证书上的通用名称不同。我是否可以上传证书,或者更好的是让 GCP 或 Firebase 管理证书?
【问题讨论】:
只需将存储桶命名为与我的域名相同的名称,然后将 CNAME 记录指向 c.storage.googleapis.com,我就能够将自定义域名映射到我的 Firebase Storage 存储桶。但是,https 不起作用,因为证书上的通用名称不同。我是否可以上传证书,或者更好的是让 GCP 或 Firebase 管理证书?
【问题讨论】:
我来晚了一点,这个问题可能已经在其他地方得到了回答。但是,由于这是我在谷歌上搜索此功能时发现的第一个结果,所以这里什么都没有:
首先,假设您有一个像 assets.somedomain.com 这样指向 c.storage.googleapis.com 的 CNAME,然后您创建了一个名为 assets.somedomain.com 的存储桶。
然后你上传一个文件,它的公共 url 看起来像:
https://firebasestorage.googleapis.com/v0/b/assets.somedomain.com/o/arduino.png?alt=media&token=asdf
可以看作:
firebasestorage.googleapis.com/v0/b/
+
assets.somedomain.com
+
/o/
+
arduino.png?alt=media&token=asdf
您应该可以使用以下方式查看所述文件:
https://assets.somedomain.com/arduino.png?alt=media&token=asdf
这是
assets.somedomain.com/
+
arduino.png?alt=media&token=asdf
(基本上,你去掉了原始的基本 URL 和 /o/ 前缀)
但是你当然会收到一个很大的警告,告诉你证书无效,因为它是为*.storage.googleapis.com 准备的。
在我的例子中,我能够使用 cloudflare 的通用 SSL 来规避这个问题,它就像一个不问任何问题的代理。
您再试一次,但在中间的某个地方,请求变得匿名,并且您收到一个 XML 说明您缺少 storage.objects.get 权限。
<Error>
<Code>AccessDenied</Code>
<Message>Access denied.</Message>
<Details>
Anonymous users does not have storage.objects.get access to object.
</Details>
</Error>
这意味着即使查询字符串中包含令牌,代理请求也没有权限。然后,下一步是使存储桶在Google Cloud Console -> Storage 中公开可读。
(这可以使用 gcloud cli 完成,但我发现这种方法更容易解释)
注意使用遗留对象读取权限,这会阻止访问者实际列出存储桶内容。
之后,您应该可以使用以下方式访问图像:
https://assets.somedomain.com/arduino.png
请注意,您甚至不需要包含“alt=media”,因为 cloudflare 将提供文件而不是其元数据。
【讨论】:
Google Cloud Console -> Storage 页面。我应该采取哪些步骤来公开存储桶?我不能通过 Firebase 规则进行设置吗?
Add members -> New members = allUsers, Role = Storage Legacy -> Storage Legacy Object Reader.
目前我们不支持 Cloud Storage for Firebase 中的自定义域。
你有两个选择:
但是,无论哪种情况,您都将无法使用 Firebase SDKs for Cloud Storage,以及它的身份验证和授权功能。
很高兴了解有关用例的更多信息,看看我们将来是否应该支持它。
【讨论】:
c.storage.googleapis.com。
https://firebasestorage.googleapis.com/v0/b/_PROJECTNAME_.appspot.com/o/_FOLDERNAME_%2F_FILENAME_.jpg?alt=media。理想情况下,我想连接/重写从我的自定义域(如/asset)到存储桶的路径。
Firebase 8.4.0 introduces storage().useEmulator(host, port)。
您仍然需要一个反向代理,您可以使用 Google Cloud Load Balancer 或其他代理。
【讨论】:
我完全同意之前的回答,非常感谢。但我正在以更好的方式编写指令
在谷歌云平台中用你的自定义域名创建一个bucket->存储。
创建遗留对象查看器的权限并将其添加到所有用户。注意:您必须从过滤文本中搜索遗留对象查看器
在您的域服务提供商帐户中添加一条 DNS 记录,其中包含指向 c.storage.googleapis.com 的 CNAME 资产。
如果没有,请创建 cloudflare 帐户
在 cloudflre 中添加网站,您需要在其中放置域名而不是子域 将名称服务器详细信息从 cloudflare 复制到您的 DNS 服务提供商名称服务器详细信息
移动 cloudflare 中的所有 dns 记录需要一些时间。
转到 cloudflare 中的页面规则并添加 assets.yourdomain.com 并打开始终使用 https
你已经完成了
【讨论】: