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});
时,我和你确认了同样的问题。因此,当我像上面那样修改您的脚本时,我确认问题已解决并且从电子表格中检索了值。
我在 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});
时,我和你确认了同样的问题。因此,当我像上面那样修改您的脚本时,我确认问题已解决并且从电子表格中检索了值。