【问题标题】:Accessing the signed url of firebase storage from browser says " Access denied"从浏览器访问 Firebase 存储的签名 URL 显示“访问被拒绝”
【发布时间】:2018-04-14 17:59:08
【问题描述】:

我有一个云功能,它将为上传的图像生成签名 URL 到 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

访问以上网址时出现错误消息。

<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>

【问题讨论】:

  • 您是否在尝试测试 URL 的浏览器中使用您的 gmail 帐户登录?
  • 是的,我在笔记本电脑的 chrome 浏览器上尝试了该链接,我使用 gmail 帐户登录

标签: android firebase firebase-storage


【解决方案1】:

您当前的存储规则可能是这样的:

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

您可以在 Storage &gt; Rules. 下的 Firebase 控制台中查看它们

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

如果您想允许所有人无需身份验证即可访问资源,您可以在Authentication &gt; Sign-In Method 中启用此功能并启用Anonymous

在此之前,请考虑以下几点:

“我的主要目的是将该图像下载到 android 应用程序中 外卡。”

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

【讨论】:

  • 嗨,我刚刚尝试了你建议的方式,但我仍然面临同样的问题。
【解决方案2】:

尽管我的 Firebase 存储读取规则是

,但我也遇到了这个问题
allow read: if true;

奇怪的是,Cloud Storage 控制台仍将存储桶显示为“不公开”。 更改它以提供公共访问解决了我的问题。

  1. 在 Google Cloud Platform Console 中打开 Cloud Storage 浏览器。
  2. 在存储桶列表中,单击要公开的存储桶的名称。选择页面顶部附近的权限选项卡。
  3. 点击添加成员按钮。
  4. 出现添加成员对话框。
  5. 在新成员字段中,输入 allUsers。
  6. 在 Roles 下拉菜单中,选择 Storage 子菜单,然后单击 存储对象查看器选项。

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

【讨论】:

    猜你喜欢
    • 2018-01-16
    • 2018-07-20
    • 1970-01-01
    • 2019-08-30
    • 2013-01-03
    • 2012-11-07
    • 1970-01-01
    • 2017-06-06
    • 1970-01-01
    相关资源
    最近更新 更多