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

问题描述

我创建了一个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。是对的吗?我还应该考虑其他步骤吗?

解决方法

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

这就是特定于应用程序的数据的意义:存储只能由创建该数据的同一应用程序访问的数据。凭据是标识应用程序的身份。

当心,这里的应用程序一词指的是为其创建凭据的GCP项目,而不是指您是在Chrome扩展程序,节点服务器上使用这些凭据还是拥有什么。无关紧要的是,存储过程是由Chrome扩展程序完成的,而存储过程是由节点应用程序进行的。在访问Drive API时,他们使用的是同一GCP项目中的凭据,这一事实将它们都标识为同一应用程序(我想这是由于“应用程序”一词的使用太常见了。) >

无论如何,完成OAuth流程后,要在应用程序数据文件夹中搜索文件,您必须将spaces字段设置为appDataFolder,然后调用{{3 }},如Files: list所示:

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);
    });
  }
});

参考: