从另一个应用程序访问特定于应用程序的数据

Access application-specific data from another app

我创建了一个 Chrome 扩展,它利用了 google 驱动器的应用特定数据:

https://developers.google.com/drive/api/v3/appdata

一切如我所愿。现在,我希望从我机器上的节点服务器访问该数据。我找到了这个使用 google 驱动器和节点的示例:

https://developers.google.com/drive/api/v3/quickstart/nodejs

该示例适用于我,但它具有不同的范围,列出用户在驱动器上可见的文件。我想要做的是访问 google 驱动器上的应用程序特定数据,这些数据是从我的第一个应用程序(Chrome 扩展名)创建的。

我不知道该怎么做。完成第二个教程后,我的 Google 开发者控制台 (https://console.developers.google.com) 添加了第二个项目。我在想,为了访问特定于应用程序的数据,我需要模仿 nodejs 应用程序在做什么,但使用不同的范围并在第一个项目的(最初用于 chrome 扩展名)条目中开发人员控制台,可能会添加第二个 OAuth 2.0 客户端 ID。那正确吗?还有其他我应该研究的步骤吗?

在您的节点应用程序上,您需要使用 来自存储 application-specific 数据的同一项目 的 OAuth 凭据授权范围 https://www.googleapis.com/auth/drive.appdata

这就是 application-specific 数据的意义所在:存储只能由创建它的同一应用程序访问的数据。凭据用于标识应用程序。

请注意,此处的应用程序一词指的是为其创建凭据的 GCP 项目,而不是指您是否在 Chrome 扩展、节点服务器或您拥有的东西上使用这些凭据。存储过程是由 Chrome 扩展完成的,并且由节点应用程序进行访问是无关紧要的。他们使用来自同一个 GCP 项目的凭据这一事实在访问 Drive API 时将它们标识为同一个应用程序(我猜混淆来自 all-too-common 应用程序一词的使用).

无论如何,完成 OAuth 流程后,为了在应用程序数据文件夹中搜索文件,您必须将 spaces 字段设置为 appDataFolder,然后调用 Files: list, as shown here:

drive.files.list({
  spaces: 'appDataFolder',
  fields: 'nextPageToken, files(id, name)',
  pageSize: 100
}, function (err, res) {
  if (err) {
    // Handle error
    console.error(err);
  } else {
    res.files.forEach(function (file) {
      console.log('Found file:', file.name, file.id);
    });
  }
});

参考: