本页:
https://console.cloud.google.com/iam-admin/serviceaccounts
如果您进入具有服务帐户的单个项目,并使用该行上的三个点来执行"获取关键字"操作,它将生成一个json,如下所示:
{
"type": "service_account",
"project_id": "project name",
"private_key_id": "sdfljsdlfsdljkf",
"private_key": "-----BEGIN PRIVATE KEY-----nsldjflsdjfkljsdfn-----END PRIVATE KEY-----n",
"client_email": "user@projectname.iam.gserviceaccount.com",
"client_id": "9797979797998",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/projectname.iam.gserviceaccount.com"
}
这与google.auth.OAuth2(client_id, client_secret, redirect_uris[])
所需要的不匹配我该怎么做才能创建一个令牌与使用此关键信息的google电子表格api一起使用?似乎redirect_uri和客户端秘密丢失了。
更新:这样做的目的是将google日历事件作为我们域下的其他用户发送。
我相信你的目标和情况如下。
- 你想使用服务帐户使用表单API
- 你想在Node.js中使用googleapi来实现这个。
- 你已经在API控制台启用了Sheets API。
本例中使用google.auth.JWT
代替google.auth.OAuth2()
。下面是一个简单的示例脚本:
示例脚本:
在使用此脚本之前,请设置google.auth.JWT()
的变量。在这种情况下,作为一个样本,client_email
和private_key
被设置。请设置电子表格ID。并且,在这种情况下,请在您的Google Drive中与服务帐户的电子邮件共享您的示例Google电子表格。通过这个,服务帐户可以读取电子表格。
const { google } = require("googleapis");
const spreadsheetId = "###"; // Please set Spreadsheet ID.
const auth = new google.auth.JWT(
"###", // Please set client_email here.
null,
"-----BEGIN PRIVATE KEY-----n###n-----END PRIVATE KEY-----n", // Please set private_key here,
["https://www.googleapis.com/auth/spreadsheets.readonly"],
null
);
const sheets = google.sheets({ version: "v4", auth: auth });
sheets.spreadsheets
.get({ spreadsheetId: spreadsheetId })
.then(({ data }) => console.log(data))
.catch((err) => console.log(err));
注意:
- 当您运行上述脚本,出现
The caller does not have permission
等错误时,请再次确认spreadsheetId
的电子表格是否与服务账号的邮箱共享。如果不是,请与服务账号的邮箱共享。 - 请确认googleapi是否为最新版本
引用:
- googleapi for Node.js
- 方法:spreadsheets.get