如何获得谷歌api服务帐户的客户端秘密



本页:

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_emailprivate_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

最新更新