Google Drive API webContentLink перенаправляет на другой домен

Я использую API Google Диска для доступа к файлам на моем общем диске. Мое серверное приложение использует 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" }

Когда я пытаюсь загрузить 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 с надлежащей областью действия, должен позволить мне делать все. Кажется, это работает для всего остального (доступ к электронным таблицам, документам и т. Д.), Но у меня возникают трудности с загрузкой изображений таким образом.

Вот подробный список запросов и ответов:

  1. Запрос: вызов OAuth2 для получения токена доступа с моим идентификатором клиента и секретом.
  2. Ответ: Получен токен доступа. Хороший
  3. Запрос: https://www.googleapis.com/drive/v3/files?corpora=teamDrive&includeTeamDriveItems=true&supportsTeamDrives=true&teamDriveId=[myTeamDriveID] с токеном авторизации в заголовке.
  4. Ответ. Статус 200. Полученный список файлов. Потрясающие.
  5. Для каждого изображения запросите webContentLink с токеном авторизации в заголовке.
  6. Запрос: https://drive.google.com/a/[myTeamDriveDomain]/uc?id=[fileID]&export=download
  7. Ответ: Статус 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]
  8. Запрос: получить URL-адрес перенаправления из предыдущего ответа с токеном авторизации в заголовке
  9. Ответ: статус 302. Перенаправлен на https://www.google.com/a/]myTeamDriveDomain]/ServiceLogin?passive=1209600&osid=1&continue=[previousRedirectURL]&followup=[previousRedirectURL]
  10. Запрос: получить URL-адрес перенаправления из предыдущего ответа с токеном авторизации в заголовке
  11. Ответ: Статус 200. Это страница входа в систему. Во время отладки, если я введу свои учетные данные, я получу изображение, но сервер не может этого сделать. Он должен иметь возможность использовать токены доступа

Есть идеи, что я делаю не так?


person Shannon Wrege    schedule 01.02.2019    source источник
comment
Можете ли вы добавить какие-либо детали, например: использованный код, возникшая ошибка? Как задать хороший вопрос?, Как создать минимальный, полный и поддающийся проверке пример Покажите сообществу, что вы пробовали.   -  person jess    schedule 01.02.2019


Ответы (1)


Если вы намерены загрузить содержимое файла в свое приложение, вы не используете webContentLink. Вместо этого вы просто get идентификатор файла с alt=media (для двоичных файлов) или экспортируете в определенный формат (для документов Google). См. https://developers.google.com/drive/api/v3/manage-downloads

person pinoyyid    schedule 01.02.2019
comment
Спасибо! Это помогло. Думаю, я совершенно не понял, как это сделать. Для других, читающих это, я просто отправил GET на https://www.googleapis.com/drive/v3/files/[fileid]?supportsTeamDrives=true&alt=media с моим токеном авторизации в заголовке, и это сработало. - person Shannon Wrege; 01.02.2019