API Google Диска 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"
}
Когда я пытаюсь загрузить webContentLink с тем же маркером Bearer в заголовках запроса, я перенаправляюсь на https://doc-0k-08-docs.googleusercontent.com/docs/securesc/...
Кажется, токен на предъявителя не работает для этого домена 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 для получения токена доступа с моим идентификатором клиента и секретом.
- Ответ: Получен токен доступа. Хорошо
- Запрос:
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. Это страница входа. Во время отладки, если я введу свои учетные данные, я получу изображение, но сервер не может сделать это. Нужно уметь использовать токены доступа
Есть идеи, что я делаю не так?
1 ответ
Если вы намерены загрузить содержимое файла в свое приложение, вы не используете webContentLink. Вместо вас просто get
идентификатор файла с alt=media
(для двоичных файлов) или экспорт в определенный формат (для документов Google). Увидеть https://developers.google.com/drive/api/v3/manage-downloads