如何使用 Google Drive API 而无需使用 Nodejs 的 OAuth?

How To Use Google Drive API Without OAuth Using Nodejs?

在搜索 Whosebug、博客、YouTube、Google Drive API 文档、e.t.c 之后,大多数示例展示了如何使用 OAuth 使用 Drive API。

我想构建一个 Nodejs 应用程序,只有当新用户在我的应用程序中创建帐户时,Nodejs 服务器才会在 Google Drive 上创建电子表格。电子表格随后可供应用程序管理员使用。

这是一个服务器端进程,因此不需要 OAuth 同意屏幕 e.t.c

有没有办法仅通过 API 键和 REST URL 的

来使用驱动器 API

下面的 Google 文档 link 有使用 REST URL 与驱动器交互的示例 API。

https://developers.google.com/drive/api/v3/reference/files/create

Google 文档对如何仅通过 API 键和上面 link 中的 REST URL 使用驱动器 API 含糊不清作为示例使用 REST URL 创建文件 e.t.c

首先你需要了解私有数据和public数据之间的区别。

Public 数据是不为任何人所有的数据。 Public youtube 视频就是一个很好的例子。您不需要所有者的许可就可以看到这些视频,您可以使用 Public api 键访问搜索视频列表方法,您将能够访问它们。

私人数据是用户拥有的数据。您的 google 驱动器帐户是私人用户数据。只有您可以访问它。只有您可以授予应用程序访问它的权限。

Public api 键只能用于访问 public 数据。要访问私人用户数据,您需要征得所有者的同意

您想使用 file.create 方法,如果您查看文档,您会发现它准确地告诉了您这一点。

您需要获得授权并且用户必须同意至少其中一个范围,您才能使用该方法。

所以回答你的问题 Is there not a way to use the Drive API with just API keys and REST URL’s 答案是否定的。不使用 api 键。

不过我还有一个选择。您的应用程序将连接到您由开发人员控制的帐户。这意味着您可以使用服务帐户。如果配置正确,服务帐户就像虚拟用户一样,您可以像与任何其他用户一样,通过与服务帐户共享该文件夹来授予它访问驱动器帐户上文件夹的权限。完成后,服务帐户将能够从您的服务器访问该驱动器帐户,而无需您进行其他交互。

// service account key file from Google Cloud console.
const KEYFILEPATH = 'C:\Youtube\dev\ServiceAccountCred.json';

// Request full drive access.
const SCOPES = ['https://www.googleapis.com/auth/drive'];

// Request full drive scope and profile scope, giving full access to google drive as well as the users basic profile information.
const SCOPES = ['https://www.googleapis.com/auth/drive', 'profile'];
// Create a service account initialize with the service account key file and scope needed
const auth = new google.auth.GoogleAuth({
    keyFile: KEYFILEPATH,
    scopes: SCOPES
});
const driveService = google.drive({version: 'v3', auth});
let fileMetadata = {
        'name': 'icon.png',
        'parents':  [  '10krlloIS2i_2u_ewkdv3_1NqcpmWSL1w'  ]
    };
let response = await driveService.files.create({
    resource: fileMetadata,
    media: media,
    fields: 'id'
});
switch(response.status){
    case 200:
        let file = response.result;
        console.log('Created File Id: ', response.data.id);
        break;
    default:
        console.error('Error creating the file, ' + response.errors);
        break;
}

代码无耻地复制自Upload Image to Google drive with Node Js