繁体   English   中英

Firebase 的签名错误 getSignedUrl()

SigningError with Firebase getSignedUrl()

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试使用file.getSignedUrl()通过 Google Cloud Functions (Nodejs) 从 Firebase Storage 获取下载 URL。 我在 Cloud Functions 控制台中收到此错误:

{ SigningError: A Forbidden error was returned while attempting to retrieve an access token for the Compute Engine built-in service account. This may be because the Compute Engine instance does not have the correct permission scopes specified. Permission iam.serviceAccounts.signBlob is required to perform this operation on service account projects/myapp-cd94d/serviceAccounts/myapp-cd94d@appspot.gserviceaccount.com.
    at SigningError (/user_code/node_modules/@google-cloud/storage/build/src/file.js:58:9)
    at authClient.sign.then.catch.err (/user_code/node_modules/@google-cloud/storage/build/src/file.js:1019:22)
    at process._tickDomainCallback (internal/process/next_tick.js:135:7) name: 'SigningError' }

我从将Firebase Admin SDK 添加到您的服务器文档中复制了代码。 我的functions文件夹中有我的serviceAccountKey.json firebase deploy没有给我错误

Error parsing triggers: Cannot find module 'serviceAccountKey.json'

所以我必须有正确的路径到我的serviceAccountKey.json 我什至生成了一个新的私钥,但没有解决问题。 我有firebase-admin 6.1.0firebase-tools 6.1.0 这是我的代码的相关部分:

const admin = require('firebase-admin');
var serviceAccount = require("./myapp-cd94d-firebase-adminsdk-1234x-sEcReT.json");

admin.initializeApp({
  credential: admin.credential.cert(serviceAccount),
  databaseURL: "https://myapp-cd94d.firebaseio.com"
});

...

const config = {
  action: 'read',
    expires: '03-17-2025'
  };

file.getSignedUrl(config).then(function(data) {
    const url = data[0];
    console.log(url);
  })
  .catch(function(error) {
    console.error(error);
  })

我看到Doug Stevenson 的答案有不同的代码,但它似乎等同于文档中的代码。

2 个回复

答案与Cloud Identity and Access Management 有关 首先,转到您的 Google Cloud Platform IAM 和管理页面。 您会看到各种服务帐户 查找类似于myapp-cd99d@appspot.gserviceaccount.com的服务帐户。 它应该在Name列中显示App Engine default service account (如果错误消息引用了不同的服务帐户,请查找该服务帐户。)

Role列中,您可能会或不会看到某些角色。 如果您收到SigningError消息,则Role列缺少角色Service Account Token Creator 选中myapp-cd99d@appspot.gserviceaccount.com左侧的myapp-cd99d@appspot.gserviceaccount.com以选择服务帐户,然后单击右侧的铅笔进行编辑。 在下一个屏幕中,单击+ADD ANOTHER ROLE 向下滚动到Service Accounts ,选择Service Account Token Creator ,然后保存。 现在,您应该会在App Engine default service accountRoles列中看到Service Account Token Creator 现在您有权创建签名令牌。

接下来,重复这些步骤并为Storage Object Creator添加角色。 这将允许您运行getSignedURL()

您可以交替保存分配服务帐户管理员和存储管理员,它们分别包括Service Account Token CreatorStorage Object Creator角色,以及其他角色。

现在,如果您收到的是SingingError消息,那可能是因为您对布鲁斯·斯普林斯汀 (Bruce Springsteen) 的“Glory Days”曲调SingingError :-)

就我而言,我启用了身份和访问管理 (IAM),网址如下:

https://console.developers.google.com/apis/api/iam.googleapis.com/overview?project= “您的项目名称”

您可以在这里找到所有文档,为什么找不到您的管理模块https://nextjs.org/docs/messages/module-not-found

3 Google 云/firebase 存储错误:无法在没有“client_email”的情况下签署数据。 ...名称:'签名错误'

我试图从 firebase/gc 存储中的文件中获取一个签名的 URL。 我能找到的所有其他解决方案是创建一个服务帐户,下载服务密钥,然后在我的应用程序中使用它,但我这样做了,但我仍然收到错误消息。 我也遵循了这个建议,并使用 Firebase getSignedUrl()向我的服务帐户Signin ...

6 使用getSignedUrl进行缩略图的firebase云功能大约一周后到期,没有明确原因?

我能够为我正在创建的缩略图成功生成一个signedUrl,但大约一周之后它们就不再工作...... 我没有得到任何关于他们为什么到期的错误或信息,他们只是。 我一直在使用firebase开发我的应用程序,现在突然间我必须处理所有这些谷歌云存储许可和什么不 - 真的不知道发生了什么.. ...

8 getSignedUrl 链接未下载

我正在为我的网站使用 Firebase 托管和 Firebase 存储。 我提供一个特殊图像 5 分钟并允许用户下载它。 这就是我生成网址的方式: 生成了 URL,我把它放在一个锚标记中,如下所示: 现在,图像尚未开始下载,它正在导航到URL。 如何使用它提供的文件名下载图像? ...

10 getSignedUrl 不允许从浏览器上传

我已经尝试了几天让 s3 上传直接从浏览器工作。 我正在使用 jQuery ajax 请求来查询我的服务器以获取签名的 url(以确保用户已通过身份验证)。 然后我返回签名的 url 并使用另一个 jQuery ajax 调用来尝试上传文件。 我的后端 node.js 代码: 传递的para ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM