【发布时间】:2018-09-08 20:31:36
【问题描述】:
我在 Google 表格上有一些数据。我正在使用Sheets API for Node.js 来访问这些数据。对于身份验证,我使用服务帐户 JSON 来生成 JWTClient。
我可以从 sheet api 访问数据,一切正常。代码托管在Google App Engine Flexible environment。它适用于本地主机和 GAE。
唯一的问题是我需要提供服务帐户密钥 json 进行身份验证。这在本地环境中很好,但在 App Engine 上它为服务帐户提供了一个default credential(我使用的是相同的服务帐户)。所以我认为我不应该手动提供凭据,让 GAE 处理服务器上的凭据。
但它不会自动进行身份验证,仍然是一个身份验证参数。
这是我当前对工作表 api 的实现 -
const { promisify } = require('util');
const google = require('googleapis');
const auth = require('./auth');
const credentials = require('../configs/credentials');
const sheets = google.sheets('v4');
const getSheetValuesAsync = promisify(sheets.spreadsheets.values.get);
//region private
function readSheet(params) {
return getSheetValuesAsync(params);
}
//endregion private
//region public
async function get(sheetConfigName) {
const sheetConfig = credentials.sheets[sheetConfigName];
//This is theJWTClient which authenticates the api request currently.
//I want to remove this
const authClient = await auth.authorizeWithServiceAccount('serviceAccountName', [
'https://www.googleapis.com/auth/spreadsheets.readonly'
]);
console.log('Client received');
let params = {
auth: authClient, //I tried removing this parameter, but it didn't work
spreadsheetId: sheetConfig.id,
range: 'A:M'
};
let data = await readSheet(params);
return data;
}
//endregion public
module.exports = {
get: get
};
我得到的错误如下:-
{
code:403,
message: 'The request is missing a valid API key.
}
我已经为本地环境设置了 GOOGLE_APPLICATION_CREDENTIALS 环境变量,该环境变量适用于 google-cloud API,但不适用于工作表。
Application Default Credentials 是仅用于 google-cloud API 还是可以与 Sheets API 或任何其他 Drive API 一起使用?如果它也可以与驱动器 API 一起使用,那该怎么做?
【问题讨论】:
-
您是否与服务帐户共享了工作表?
-
@LundinCast 该工作表具有公共访问权限,因此不是必需的。
-
那么您可以使用 API 密钥。还是需要使用 OAuth 2.0?
-
是的,我可以使用 API 密钥,它也可以使用它。我的目标是尽量减少代码中的额外凭据。我不想在代码中包含 API 密钥或服务帐户。由于服务帐户已经可用且易于管理,我想使用同一个帐户。多个凭据很难管理。
标签: javascript node.js google-app-engine google-cloud-platform google-sheets-api