【发布时间】: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 授予的访问令牌应该允许我做所有事情。它似乎适用于其他一切(访问电子表格、文档等),但我很难以这种方式下载图像。
以下是请求和响应的详细列表:
- 请求:OAuth2 调用以使用我的客户端 ID 和密码获取访问令牌。
- 响应:收到访问令牌。不错
- 请求:
https://www.googleapis.com/drive/v3/files?corpora=teamDrive&includeTeamDriveItems=true&supportsTeamDrives=true&teamDriveId=[myTeamDriveID]标头中带有授权令牌。 - 响应。状态 200。收到的文件列表。太棒了。
- 对于每张图片,请求 webContentLink 并在标头中使用授权令牌
- 请求:
https://drive.google.com/a/[myTeamDriveDomain]/uc?id=[fileID]&export=download - 响应:状态 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] - 请求:从以前的响应中获取重定向 URL,标头中带有授权令牌
- 响应:状态 302。重定向到
https://www.google.com/a/]myTeamDriveDomain]/ServiceLogin?passive=1209600&osid=1&continue=[previousRedirectURL]&followup=[previousRedirectURL] - 请求:从以前的响应中获取重定向 URL,标头中带有授权令牌
- 响应:状态 200。这是登录页面。在调试时,如果我输入我的凭据,我会得到图像,但服务器不能这样做。它需要能够使用访问令牌
任何想法我做错了什么?
【问题讨论】:
-
您可以添加任何详细信息,例如:使用的代码,遇到的错误问题吗? How do I ask a good question?, How to create a Minimal, Complete, and Verifiable example 向社区展示你的尝试。
标签: google-drive-api google-drive-shared-drive