【发布时间】:2018-04-21 18:54:21
【问题描述】:
目标
将googleapis 与 Firebase Cloud Functions 结合使用,以获取我的 G Suite 域中所有用户的列表。
问题
我如何Instantiate an Admin SDK Directory service object。我没有看到 NodeJS 示例,也不清楚如何使用googleapis 设置和发出请求。
上下文
此代码从 Firebase Cloud Functions 运行,并且似乎可以通过身份验证。现在,我如何在以下代码中设置//TODO 的服务对象:
// Firebase Admin SDK
const functions = require('firebase-functions')
const admin = require('firebase-admin')
admin.initializeApp(functions.config().firebase)
// Google APIs
const googleapis = require('googleapis')
const drive = googleapis.drive('v3')
const gsuiteAdmin = googleapis.admin('directory_v1')
// Service Account Key - JSON
let privatekey = require("./privatekey.json")
let jwtClient = new googleapis.auth.JWT(
privatekey.client_email,
null,
privatekey.private_key,
['https://www.googleapis.com/auth/drive',
'https://www.googleapis.com/auth/admin.directory.user'])
// Firebase Cloud Functions - REST
exports.authorize = functions.https.onRequest((request, response) => {
//authenticate request
jwtClient.authorize(function (err, tokens) {
if (err) {
console.log(err)
return
} else {
console.log("Successfully connected!")
}
// TODO
// USE SERVICE OBJECT HERE??
// WHAT DOES IT LOOK LIKE?
response.send("Successfully connected!")
})
})
【问题讨论】:
-
我的第一个 JWT 没有提供域范围的委派,当我添加 impersonator 时出现错误。代码和设置很好。我在我的服务帐户(已使用 DwD 设置)中创建了一个 new 密钥,并换入了新的 key.json(从 GCP 自动下载)。这解决了这个问题,并且应用程序正在以我们 G Suite 域中的任何用户的身份向驱动器 API 发出请求!当我获得使用 Directory API 的代码时,我会添加一个答案。
标签: node.js jwt google-cloud-functions google-admin-sdk service-accounts