如何从URL隐藏Google存储桶路径和图像名称

问题描述 投票:0回答:3

我正在使用Google存储来存储用户的个人资料照片。我有几千张照片。

现在图片被保存在一个桶中,如下所示:data / images / profiles / USER_ID.jpg

所以图像的URL:https://storage.cloud.google.com/data/images/profiles/USER_ID.jpg

我不希望用户只知道他们的USER_ID就能看到其他人的图片,而且,它必须是USER_ID才能更方便地从开发人员那里搜索。

我无法使用签名网址,因为我的用户没有Google帐户,而且存储空间中的图片是从移动应用程序中提取的。

有没有办法保存文件名,因为它们在存储中,但是简单地隐藏URL中的路径+文件名?

https://storage.cloud.google.com/fc720d5c05411b03e5e2a6692f8d7d61.jpg -> points to https://storage.cloud.google.com/data/images/profiles/USER_ID.jpg

谢谢

firebase google-cloud-storage firebase-storage
3个回答
0
投票

你有几个选择。以下是一些:

  • 让用户从服务器请求另一个用户的URL,然后让服务器决定是否允许用户查看图像。如果是这样,请让服务器(具有服务帐户)生成签名URL并将其传递回用户(或重定向到该用户)。这样,虽然用户可能知道另一个用户的用户ID和他们的图像的URL,但他们仍然无法看到图像,除非服务器同意这是可以的。
  • 使用Firebase存储来管理图像,这些图像仍将它们存储在GCS中,但会为您提供Firebase的auth支持。
  • 通过您的应用程序代理图像,应用程序引擎应用程序或在GCE或GKE中运行的东西。这使您可以隐藏有关图像源的所有内容,包括用户ID,但有一个缺点,即要求所有数据都通过您的服务。
  • 重新检查您的要求。 “在开发人员方面更容易搜索”可能没有您想象的那么重要,并且您需要将其利益与解决它的成本相提并论。

0
投票

另一种选择是在AppEngine上提供Google Images API。您可以将您的云端存储对象与Google Images API相关联,并使用此API的优势 - 安全网址,使用网址参数转换和调整图片大小。您只需为存储在GCS中的每个图像准备servingURL并保留此服务URL(例如在Google Datastore中)

ImagesService imagesService = ImagesServiceFactory.getImagesService();
ServingUrlOptions suo = ServingUrlOptions.Builder
    .withGoogleStorageFileName(gcsImageObjectPath)
    .secureUrl(true);
String servingUrl = imagesService.getServingUrl(suo);

-1
投票

您要发布的网址类型:

https://storage.cloud.google.com/[BUCKET_NAME]/[OBJECT_NAME]

只是为了accessing the bucket or the object directly in a browser throught the Cloud Console

当一个应用程序想要访问该对象时,它主要是does an HTTP GET request

https://www.googleapis.com/storage/v1/b/[BUCKET_NAME]/o/[OBJECT_NAME]

或者它使用Cloud Storage client library

我相信一个好的应用程序设计不应该让用户猜测正在调用的URL或URL模式,因此也就是桶或对象名称。但无论如何强烈建议遵循Best Practices for Google Cloud Storage

不要在存储桶名称中使用用户ID,电子邮件地址,项目名称,项目编号或任何个人身份信息(PII),因为任何人都可以探测存储桶的存在。同样,在将PII放入对象名称时要非常小心,因为对象名称出现在对象的URL中。

此外,如果没有提供USER_ID来访问存储桶,那么任何猜测了存储桶名称的用户将无法确定是否存在right permissions或者他们的请求将被阻止。

© www.soinside.com 2019 - 2024. All rights reserved.