Google Storage-签名的url请求的身份验证范围不足

时间:2019-01-14 14:36:17

标签: firebase google-cloud-platform google-cloud-storage firebase-storage

我正在使用Google Cloud Node.js存储库将一些图像上传到云存储。这一切都很好。然后,我尝试使用上次上传文件的相同存储对象,在上传文件后立即生成一个签名的URL,但是我收到以下错误消息:

Request had insufficient authentication scopes 

我不确定如果所有这些都链接到最初上传的同一服务帐户,为什么会发生这种情况。 (值得的是,它是一个firebase应用程序。)

代码如下:

const Storage = require('@google-cloud/storage');
storage = new Storage();
storage.bucket(bucketName).upload(event.file.pathName, {
                    // Support for HTTP requests made with `Accept-Encoding: gzip`
                    gzip: true,
                    destination: gcsname,
                    metadata: {
                      // Enable long-lived HTTP caching headers
                      // Use only if the contents of the file will never change
                      // (If the contents will change, use cacheControl: 'no-cache')
                      cacheControl: 'public, max-age=31536000'

                    },
                  }).then(result => {
                      let url = `https://storage.googleapis.com/${bucketName}/${gcsname}`;


                          const options = {
                            action: 'read',
                            expires: Date.now() + 1000 * 60 * 60, // one hour
                          };

                          // Get a signed URL for the file

                          storage.bucket(bucketName).file(gcsname).getSignedUrl(options).then(result => {
                              console.log("generated signed url", result);

                          }).catch(err => {
                            console.log("err occurred", err)

                          })

                      })

存储桶本身不是公共的,对象也不是对象,但是据我了解,我仍然应该能够生成签名的URL。该应用程序本身在GCP计算引擎上运行,因此没有将任何选项传递给new Storage()-实际上传递选项也会导致上传失败。

有人可以建议我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

由于我所拥有的信息量有限,根据收到的错误,您可能会缺少以下几件事:

  1. 必须为项目启用Identity and Access Management (IAM) API

  2. Compute Engine服务帐户需要iam.serviceAccounts.signBlob权限,该权限可用于“服务帐户令牌创建者”角色。

此外,您可以在此处找到有关该主题的更多文档。

https://cloud.google.com/storage/docs/access-control/signed-urls https://cloud.google.com/storage/docs/access-control/signing-urls-manually