从浏览器访问Firebase存储的签名网址会说" Access denied"



我有一个云函数,它将为上传到Firebase存储的图像生成签名网址,并能够生成签名网址。

当我尝试通过浏览器从该 URL 访问图像时,下面是我收到的错误消息。

url : https://storage.googleapis.com/mango-b715d.appspot.com/thumb_ESP_014033_1910_desktop.jpg?GoogleAccessId=firebase-adminsdk-lar4y@mango-b715d.iam.gserviceaccount.com

错误信息:

<Error>
<Code>AccessDenied</Code>
<Message>Access denied.</Message>
<Details>
Anonymous caller does not have storage.objects.get access to mango-b715d.appspot.com/thumb_ESP_014033_1910_desktop.jpg.
</Details>
</Error>

有人可以解释我,如何解决此错误,我的主要目的是将该图像下载到Android应用程序中到外部卡。

有人可以指导我.

想要添加更多信息。

完整的签名网址

https://storage.googleapis.com/mango-b715d.appspot.com/ESP_014033_1910_desktop.jpg?GoogleAccessId=firebase-adminsdk-lar4y@mango-b715d.iam.gserviceaccount.com&Expires=13575340800&Signature=ayF424C3Fd04XLF82GeREn72wvl0Cox9cB%2BrSPK6wohEP1taXb7yMeW%2Fe6QRirpn%2BSM3HaU2CGRhi6Ae5RmJL8lYKPa%2BGOUhiWG6MxVsInoE0SbvkZeW0fIVdsVyGFIcQkFQeeiaBBm5E239TfAPP8P%2F%2BemcVQ8oiOCKac8uOIb4S4aIQfFBhkuWHNf2U8g4%2B9VxWTrAkRbYN5wuVc78mZmmuKi6q%2BT1IMB5nWnO3z4x893%2FyalzBEtT3uWRibesBspKLEJkoBn1dU7bYi0XuyZ6GByJesJMmGjZvq99hcI%2FgQ7kutGHcLS5HJ%2Bw9UZwwgNqMFlF%2BoS7WQg7Eu68tQ%3D%3D

在 URL 上方访问时出现错误消息。

<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>
GET 13575340800 /mango-b715d.appspot.com/ESP_014033_1910_desktop.jpg
</StringToSign>

您当前的存储规则可能具有以下功能:

service firebase.storage {
  match /b/{bucket}/o {
    match /{allPaths=**} {
      allow read, write: if request.auth != null;
    }
  }
}

您可以在 Firebase 控制台的"Storage > Rules. 下查看它们

这意味着您的用户应经过身份验证才能在存储中读取或写入。

如果要允许每个人在没有身份验证的情况下访问资源,可以在 Authentication > Sign-In Method 中启用此功能并启用 Anonymous

在此之前,请考虑以下事项:

"我的主要目的是将该图像下载到Android应用程序中 外部卡。

也许您应该只使用 Google 登录方法,让您的用户在应用中进行身份验证。看https://firebase.google.com/docs/auth/android/google-signin?hl=es-419

尽管我的 Firebase 存储规则用于读取

allow read: if true;

奇怪的是,云存储控制台仍然将存储桶显示为"非公共"。更改它以提供公共访问权限解决了我的问题。

  1. 在 Google Cloud Platform Console 中開啟 Cloud Storage 瀏覽器。
  2. 在存储桶列表中,单击要公开的存储桶的名称。选择页面顶部附近的"权限"选项卡。
  3. 单击添加成员按钮。
  4. 此时将显示"添加成员"对话框。
  5. 在 新成员 字段中,输入所有用户。
  6. 在角色下拉列表中,选择存储子菜单,然后单击 存储对象查看器选项。

从 - https://cloud.google.com/storage/docs/access-control/making-data-public 复制的步骤

相关内容

最新更新