【问题标题】:how to get client secret for a service account for google api如何获取 google api 服务帐户的客户端密码
【发布时间】:2021-04-26 05:42:53
【问题描述】:

本页:

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-----\nsldjflsdjfkljsdf\n-----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_uris 和客户端密码。

更新:这样做的目的是作为我们域下的其他用户发送谷歌日历事件。

【问题讨论】:

    标签: google-api-nodejs-client


    【解决方案1】:

    我相信你的目标和情况如下。

    • 您想通过服务帐号使用 Sheets API。
    • 您希望使用 googleapis for Node.js 来实现此目的。
    • 您已经在 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的电子表格是否与服务账号的邮箱共享。如果不是,请与服务帐号的邮箱分享。
    • 请确认googleapis的版本是否为最新。

    参考资料:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-22
      • 2019-04-03
      • 1970-01-01
      • 2018-01-13
      • 2020-06-09
      • 1970-01-01
      相关资源
      最近更新 更多