【问题标题】:Google Drive API webContentLink redirects to a different domainGoogle Drive API webContentLink 重定向到不同的域
【发布时间】:2019-02-01 04:12:52
【问题描述】:

我正在使用 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&amp;includeTeamDriveItems=true&amp;supportsTeamDrives=true&amp;teamDriveId=[myTeamDriveID] 标头中带有授权令牌。
  4. 响应。状态 200。收到的文件列表。太棒了。
  5. 对于每张图片,请求 webContentLink 并在标头中使用授权令牌
  6. 请求:https://drive.google.com/a/[myTeamDriveDomain]/uc?id=[fileID]&amp;export=download
  7. 响应:状态 302 与 P3P 标头 CP="This is not a P3P policy! 重定向到 http://docs.google.com/a/[myTeamDriveDomain]/nonceSigner?nonce=[alphaNumericID]&amp;continue=https://doc-0g-08-docs.googleusercontent.com/docs/securesc/[longAlphaNumericID]/[longAlphaNumericID]/[longNumericID]/[longNumericID]/[longNumericID]/[longAlphaNumericID]?e%3Ddownload%26h%3D[longNumericID]&amp;hash=[hashValue]
  8. 请求:从以前的响应中获取重定向 URL,标头中带有授权令牌
  9. 响应:状态 302。重定向到 https://www.google.com/a/]myTeamDriveDomain]/ServiceLogin?passive=1209600&amp;osid=1&amp;continue=[previousRedirectURL]&amp;followup=[previousRedirectURL]
  10. 请求:从以前的响应中获取重定向 URL,标头中带有授权令牌
  11. 响应:状态 200。这是登录页面。在调试时,如果我输入我的凭据,我会得到图像,但服务器不能这样做。它需要能够使用访问令牌

任何想法我做错了什么?

【问题讨论】:

标签: google-drive-api google-drive-shared-drive


【解决方案1】:

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

【讨论】:

  • 谢谢!那成功了。我想我完全误解了如何做到这一点。对于阅读本文的其他人,我只需在标题中使用我的授权令牌向https://www.googleapis.com/drive/v3/files/[fileid]?supportsTeamDrives=true&amp;alt=media 发出GET,它就起作用了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-26
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多