【问题标题】:Restrict access to images in bucket to authenticated users限制经过身份验证的用户访问存储桶中的图像
【发布时间】:2019-10-13 06:07:17
【问题描述】:

寻找有关如何使用只有经过身份验证的用户才能访问的图像设置 Google Cloud Storage 存储桶的说明。

我们的应用程序使用 Firstore 和 Cloud Storage。我们将图像存储在我们不希望在 NET 上公开可见的 GCS 存储桶中。 我们有设置存储规则

allow read: if request.auth.uid != null;

我们还在 Firebase 配置设置中配置了存储桶。 然后我们使用存储 API 来获取目标路径的 getDownloadURL()。 这有效,我们能够看到图像。但是,如果我们从页面复制图像 URL 并转到另一个浏览器(未登录),该浏览器就能够下载图像。

问题:配置和访问 GCS 存储桶的正确(也是最有效)方法是什么,以便只有使用 Firebase signInWithEmailAndPassword() 进行身份验证的经过身份验证的用户才能查看图像。

这是我们目前所做的(Angular 和 AngularFire)

// Assumes storage is an instance of the AngularFireStorage service
this.storage.getDownloadURL('/thumbs/imagename.jpg')
  .subscribe(path => {
     this.imgSrc = path;
});

如上所述,生成的路径是公开的,上述过程非常缓慢——图像需要很长时间才能出现在屏幕上。

我猜这不是正确的方法?

【问题讨论】:

    标签: angular authorization google-cloud-storage firebase-storage


    【解决方案1】:

    只要拥有该 URL,任何人都可以随时查看下载 URL 背后的内容。您无法更改此行为。如果您不希望从您的存储桶中提供任何未经授权的内容,请不要生成任何下载 URL。您必须通过提供的客户端 SDK 和 Firebase 身份验证 SDK 强制对存储桶进行所有访问。

    【讨论】:

    • 谢谢道格 - 我想我要问的是如何做到这一点的详细信息。正如我所提到的,我们已经为此苦苦挣扎了一段时间,而公众对图像的访问是一个交易破坏者。我们目前只生成 URL,以便某些内容可见。我们真的在为文档苦苦挣扎 - 如果您有资源可以为我们提供这些资源 - 我将不胜感激。
    • 我认为产品文档中没有任何内容需要了解。底线是您将无法生成 URL 以放入 img 标记。 JavaScript 无法像在 Android 和 iOS 上使用 Firebase-UI 那样将图像数据下载到屏幕上的元素。可以在 API 文档中查看参考的可用方法。 firebase.google.com/docs/reference/js/…
    【解决方案2】:

    正如 Doug 所说,您必须使用客户端 SDK 来完成此操作,根据您需要的控制级别,您可以选择官方文档 [1] 中列出的选项之一,并且只允许经过身份验证的用户访问使用 Firebase 身份验证 SDK [2]。

    [1]https://cloud.google.com/storage/docs/access-control/

    [2]https://firebase.google.com/docs/storage/security/user-security

    【讨论】:

    • 谢谢 Ricardo - 正如我在我的 OP 中提到的,我们已经根据第二个链接配置了规则 - 没有效果。第一个链接只是为了真正提供帮助的高层次 - 寻找可以帮助我们了解细节的东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-28
    • 1970-01-01
    • 2016-01-15
    • 2020-05-16
    • 1970-01-01
    • 2017-03-25
    • 2021-01-27
    相关资源
    最近更新 更多