首页 > 解决方案 > NodeJS Googleapis 服务帐号认证

问题描述

我正在尝试使用服务帐户对 GoogleAPI 执行身份验证。我设置了一个服务帐户,其凭据位于credentials.json. 我尝试访问一个私人工作表,我在其中添加了具有编辑权限的服务帐户的电子邮件地址。

这是我正在使用的代码:

const {
    google
} = require('googleapis');
const fs = require('fs');

let scopes = ['https://www.googleapis.com/auth/spreadsheets'];
let credentials = require("./credentials.json");

const authClient = new google.auth.JWT(
    credentials.client_email,
    null,
    credentials.private_key,
    scopes);

authClient.authorize(function(err, tokens) {
    if (err) {
        console.log(err);
        return;
    } else {
        authClient.setCredentials(tokens);
    }
});

const sheets = google.sheets({
    version: 'v4',
    authClient
});

let spreadsheetId = //...
let range = //...

const request = {
    spreadsheetId: spreadsheetId,
    range: range
};

sheets.spreadsheets.values.get(request, function(err, response) {
    if (err) {
        console.log('The API returned an error: ' + err);
    } else {
        console.log('Result: ' + response);
    }
});

我猜 API 会随着时间而改变,因为许多指南展示了不同的方法,最终没有一个对我有用。错误如下:

The API returned an error: Error: The request is missing a valid API key.

据我了解,只有在未经身份验证的情况下访问公共表时才需要一个简单的 API 密钥,所以我不明白为什么它甚至需要它。如果我添加这样的 API 密钥,我会收到错误

The API returned an error: Error: The caller does not have permission

使用

$ npm list googleapis
`-- googleapis@52.1.0

任何帮助将不胜感激。

标签: node.jsgoogle-apiservice-accounts

解决方案


推荐阅读