Google Drive API webContentLink重定向到其他域



我正在使用Google Drive API访问我的团队驱动器上的文件。我的服务器应用程序使用OAuth2来获取访问令牌。然后我使用这个令牌作为Bearer令牌来进行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. 响应:具有P3P标头CP="This is not a P3P policy!的状态302已重定向到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. 请求:从标头中包含Authorization令牌的先前响应中获取重定向url
  9. 响应:状态302。已重定向至https://www.google.com/a/]myTeamDriveDomain]/ServiceLogin?passive=1209600&osid=1&continue=[previousRedirectURL]&followup=[previousRedirectURL]
  10. 请求:从标头中包含Authorization令牌的先前响应中获取重定向url
  11. 回复:状态200。这是登录页面。在调试时,如果我输入凭据,我将获得映像,但服务器无法做到这一点。它需要能够使用Access令牌

你知道我做错了什么吗?

如果您打算将文件内容下载到应用程序,则不使用webContentLink。相反,您只需使用alt=mediaget文件id(对于二进制文件)或导出为特定格式(对于Google文档)。参见https://developers.google.com/drive/api/v3/manage-downloads

最新更新