Google Sheet API - 具有全域委派的服务帐户 - 请求缺少有效的 API 密钥

Google Sheet API - Service account with Domain Wide Delegation - The request is missing a valid API key

我在 Node 上使用 GAPI 库 v75。

我正在使用服务帐户和全域授权成功调用 Google 课堂 API,以便在用户上下文中进行更改。

我现在需要访问 Google Sheet,因此已激活 Sheet API 并在管理控制台中授权所需的范围。这是代码:

  const sheets = google.sheets({version: 'v4', jwtObject});
        sheets.spreadsheets.get({spreadsheetId : thisSheetId}, function(err, returnValue) {
            if (err)  {
                res.json(err)
            } else {
                res.json(returnValue.data)
            }
        }); 

正在通过以下方式生成 JWT:

 var jwtClient = new google.auth.JWT(
         client_email,
         null,
         private_key,
         scopes,
         emailToImpersonate
  );

jwtClient.authorize(function (err, tokens) {
  if (err) {
      console.error('Unable to authenticate with google:', err);

      return
  }

  callback(err, jwtClient)

我生成 JWT 的方式与我为课堂 API 和 Admin SDK 生成的方式完全相同,它们都工作正常。但是对于 sheets API,我收到:

"code":403,"errors":[{"message":"The request is missing a valid API key.","domain":"global","reason":"forbidden"}]

我不明白为什么我要传递一个有效的 JWT 为什么我需要提供一个 API 密钥 - 我确实尝试生成一个 API 密钥,然后我收到了一个权限错误,这是有道理的,因为 sheet 不是 public.

感谢您为我指明正确的方向。

在你的脚本中,做如下修改怎么样?

发件人:

const sheets = google.sheets({version: 'v4', jwtObject});

收件人:

const sheets = google.sheets({version: 'v4', auth: jwtObject});

注:

  • 当我测试const sheets = google.sheets({version: 'v4', jwtObject});时,我和你确认了同样的问题。因此,当我像上面那样修改您的脚本时,我确认问题已解决并且从电子表格中检索了值。