Google Drive API webContentLink重定向到另一个域

时间:2019-02-01 04:12:52

标签: google-drive-api google-drive-team-drive

我正在使用Google Drive API访问团队驱动器上的文件。我的服务器应用程序使用OAuth2获得访问令牌。然后,我将此令牌用作承载令牌来进行API驱动器调用。当我尝试从团队驱动器下载图像时,调用https://www.googleapis.com/drive/v3/files端点时列出的文件之一是:

{ "id": "<longAlphaNumericID>", "mimeType": "image/jpeg", "webContentLink": "https://drive.google.com/a/<myTeamDriveDomain>/uc?id=SOME_GOOGLE_DRIVE_ID&export=download", "fileExtension": "jpg", "size": "108794" }

当我尝试在请求标头中下载具有相同Bearer令牌的webContentLink时,我被重定向到https://doc-0k-08-docs.googleusercontent.com/docs/securesc/ ...

该Bearer令牌似乎不适用于该googleusercontent.com域,并且我的服务器最终被转发到登录页面(这对服务器应用不利)。

当尝试发出第二个请求时,我注意到响应头包含:

Access-Control-Allow-Origin: * Access-Control-Allow-Credentials: false Access-Control-Allow-Methods: GET,OPTIONS P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/answer/151657?hl=en for more info."

我认为最后一个标头指出了问题所在,它与重定向到另一个域有关,但是我不确定该如何处理。我认为通过OAuth2授予​​的访问令牌在适当范围内应该可以执行所有操作。它似乎确实可以用于其他所有功能(访问电子表格,文档等),但是我很难以这种方式下载图像。

以下是请求和响应的详细列表:

  1. 请求:OAuth2调用以获取具有我的客户端ID和密码的访问令牌。
  2. 响应:收到访问令牌。好
  3. 请求:https://www.googleapis.com/drive/v3/files?corpora=teamDrive&includeTeamDriveItems=true&supportsTeamDrives=true&teamDriveId=[myTeamDriveID],标头中带有授权令牌。
  4. 响应。状态200。已接收文件列表。很棒。
  5. 对于每个图像,请求带有标头中的Authorization令牌的webContentLink
  6. 请求:https://drive.google.com/a/[myTeamDriveDomain]/uc?id=[fileID]&export=download
  7. 响应:状态302与P3P标头CP="This is not a P3P policy!重定向到http://docs.google.com/a/[myTeamDriveDomain]/nonceSigner?nonce=[alphaNumericID]&continue=https://doc-0g-08-docs.googleusercontent.com/docs/securesc/[longAlphaNumericID]/[longAlphaNumericID]/[longNumericID]/[longNumericID]/[longNumericID]/[longAlphaNumericID]?e%3Ddownload%26h%3D[longNumericID]&hash=[hashValue]
  8. 请求:使用标题中的授权令牌从先前的响应中获取重定向网址
  9. 响应:状态302。已重定向至https://www.google.com/a/]myTeamDriveDomain]/ServiceLogin?passive=1209600&osid=1&continue=[previousRedirectURL]&followup=[previousRedirectURL]
  10. 请求:使用标题中的授权令牌从先前的响应中获取重定向网址
  11. 响应:状态200。这是登录页面。在调试时,如果输入我的凭据,我将获得映像,但是服务器无法执行此操作。它需要能够使用访问令牌

有什么想法我在做什么错吗?

1 个答案:

答案 0 :(得分:1)

如果打算将文件内容下载到您的应用程序,则不要使用webContentLink。取而代之的是,您只需使用get alt=media来标识文件ID(对于二进制文件)或导出为特定格式(对于Google文档)。参见https://developers.google.com/drive/api/v3/manage-downloads