使用域范围委派和服务帐户的Google OAuth

问题描述 投票:0回答:1

我正在尝试通过服务帐户使用域范围内的委托进行Google Drive API调用。我可以使身份验证正常工作,但不能使驱动器api调用。错误:在驱动器中创建文件时找不到文件

[在进行域范围授权之前,我还通过与服务帐户共享驱动器文件夹来使其工作。但是现在我希望它可以不共享而工作。

我认为我需要在某个地方进行一些setServiceAccount的操作。不知道会在哪里发生。

const {google} = require('googleapis');
const auth = new google.auth.JWT(
    client_email, null,
    privateKey, ['https://www.googleapis.com/auth/drive']
);
const drive = google.drive({version: "v3", auth});
//drive.files.create({});
node.js google-drive-api google-oauth service-accounts domain-wide-delegation
1个回答
0
投票

答案:

您需要将从GCP控制台获得的服务帐户私钥传递给JWT客户端,并指定您希望模拟为subject的用户。

代码:

获得私钥后,需要在授权之前将其传递给JWT客户端:

let google = require('googleapis');
let privateKey = require("./privatekey.json");

var jwtClient = new google.auth.JWT({
       email: privateKey.client_email,
       key: privateKey.private_key,
       scopes: ['https://www.googleapis.com/auth/drive'],
       subject: '[email protected]'
    });

jwtClient.authorize(function (error, tokens) {
  if (error) {
    console.log(error);
    return;
  } 
  else {
    console.log("Successfully connected!");
  }
});

然后,您可以使用Drive API作为服务帐户来执行您想要的操作。

希望对您有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.