google-sheets-api - Google Sheet API - 具有域范围委派的服务帐户 - 请求缺少有效的 API 密钥
问题描述
我在 Node.js 上使用 GAPI 库 v75。
我正在使用服务帐户和域范围的委派成功调用 Google Classroom API,以便在用户的上下文中进行更改。
我现在需要访问 Google 表格,因此已激活表格 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 生成的方式完全相同,它们都可以正常工作。但对于工作表 API,我收到:
"code":403,"errors":[{"message":"The request is missing a valid API key.","domain":"global","reason":"forbidden"}]
我不明白为什么如果我传递了一个有效的 JWT,为什么我需要提供一个 API 密钥 - 我确实尝试生成一个 API 密钥,然后我收到了一个权限错误,这是有道理的,因为工作表不是公开的。
感谢您为我指明正确方向提供的任何帮助。
解决方案
在您的脚本中,如何进行以下修改?
从:
const sheets = google.sheets({version: 'v4', jwtObject});
至:
const sheets = google.sheets({version: 'v4', auth: jwtObject});
笔记:
- 当我测试时
const sheets = google.sheets({version: 'v4', jwtObject});
,我向你确认了同样的问题。所以,当我像上面那样修改你的脚本时,我确认问题已经解决,并且从电子表格中检索了值。