Google Drive API webContentLink 重定向到不同的域

Google Drive API webContentLink redirects to a different domain

我正在使用 Google 驱动器 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" }

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

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

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

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."

我认为最后一个 header 指出了我的问题,它与重定向到另一个域有关,但我不确定我需要做什么。我认为通过 OAuth2 授予的具有适当范围的访问令牌应该允许我做所有事情。它似乎适用于其他一切(访问电子表格、文档等),但我无法通过这种方式下载图像。

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

  1. 请求:OAuth2 调用以使用我的客户端 ID 和密码获取访问令牌。
  2. 响应:收到访问令牌。好
  3. 请求:https://www.googleapis.com/drive/v3/files?corpora=teamDrive&includeTeamDriveItems=true&supportsTeamDrives=true&teamDriveId=[myTeamDriveID] 具有 header 中的授权令牌。
  4. 响应。状态 200。收到的文件列表。太棒了
  5. 对于每个图像,使用 header
  6. 中的授权令牌请求 webContentLink
  7. 要求:https://drive.google.com/a/[myTeamDriveDomain]/uc?id=[fileID]&export=download
  8. 响应:P3P 状态 302 header 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]
  9. 请求:从之前在 header
  10. 中使用授权令牌的响应获取重定向 url
  11. 响应:状态 302。重定向到 https://www.google.com/a/]myTeamDriveDomain]/ServiceLogin?passive=1209600&osid=1&continue=[previousRedirectURL]&followup=[previousRedirectURL]
  12. 请求:从之前在 header
  13. 中使用授权令牌的响应获取重定向 url
  14. 响应:状态 200。这是登录页面。在调试时,如果我输入我的凭据,我将获得图像,但服务器无法执行此操作。它需要能够使用访问令牌

知道我做错了什么吗?

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