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 授予的具有适当范围的访问令牌应该允许我做所有事情。它似乎适用于其他一切(访问电子表格、文档等),但我无法通过这种方式下载图像。
以下是请求和响应的详细列表:
- 请求:OAuth2 调用以使用我的客户端 ID 和密码获取访问令牌。
- 响应:收到访问令牌。好
- 请求:
https://www.googleapis.com/drive/v3/files?corpora=teamDrive&includeTeamDriveItems=true&supportsTeamDrives=true&teamDriveId=[myTeamDriveID]
具有 header 中的授权令牌。
- 响应。状态 200。收到的文件列表。太棒了
- 对于每个图像,使用 header
中的授权令牌请求 webContentLink
- 要求:
https://drive.google.com/a/[myTeamDriveDomain]/uc?id=[fileID]&export=download
- 响应: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]
- 请求:从之前在 header
中使用授权令牌的响应获取重定向 url
- 响应:状态 302。重定向到
https://www.google.com/a/]myTeamDriveDomain]/ServiceLogin?passive=1209600&osid=1&continue=[previousRedirectURL]&followup=[previousRedirectURL]
- 请求:从之前在 header
中使用授权令牌的响应获取重定向 url
- 响应:状态 200。这是登录页面。在调试时,如果我输入我的凭据,我将获得图像,但服务器无法执行此操作。它需要能够使用访问令牌
知道我做错了什么吗?
如果您打算将文件内容下载到您的应用程序,则不要使用 webContentLink。相反,您只需 get
带有 alt=media
的文件 ID(对于二进制文件)或导出为特定格式(对于 Google 文档)。参见 https://developers.google.com/drive/api/v3/manage-downloads
我正在使用 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 授予的具有适当范围的访问令牌应该允许我做所有事情。它似乎适用于其他一切(访问电子表格、文档等),但我无法通过这种方式下载图像。
以下是请求和响应的详细列表:
- 请求:OAuth2 调用以使用我的客户端 ID 和密码获取访问令牌。
- 响应:收到访问令牌。好
- 请求:
https://www.googleapis.com/drive/v3/files?corpora=teamDrive&includeTeamDriveItems=true&supportsTeamDrives=true&teamDriveId=[myTeamDriveID]
具有 header 中的授权令牌。 - 响应。状态 200。收到的文件列表。太棒了
- 对于每个图像,使用 header 中的授权令牌请求 webContentLink
- 要求:
https://drive.google.com/a/[myTeamDriveDomain]/uc?id=[fileID]&export=download
- 响应: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]
- 请求:从之前在 header 中使用授权令牌的响应获取重定向 url
- 响应:状态 302。重定向到
https://www.google.com/a/]myTeamDriveDomain]/ServiceLogin?passive=1209600&osid=1&continue=[previousRedirectURL]&followup=[previousRedirectURL]
- 请求:从之前在 header 中使用授权令牌的响应获取重定向 url
- 响应:状态 200。这是登录页面。在调试时,如果我输入我的凭据,我将获得图像,但服务器无法执行此操作。它需要能够使用访问令牌
知道我做错了什么吗?
如果您打算将文件内容下载到您的应用程序,则不要使用 webContentLink。相反,您只需 get
带有 alt=media
的文件 ID(对于二进制文件)或导出为特定格式(对于 Google 文档)。参见 https://developers.google.com/drive/api/v3/manage-downloads