Авторизация запросов с OAuth 2.0 в Google Spreadsheet API - PullRequest
4 голосов
/ 01 ноября 2011

Я пытаюсь создать веб-страницу PHP, которая требует чтения некоторых данных из электронной таблицы Google в моем домене (я использую Google Apps Free Edition).

Электронная таблица, которая должна быть прочитана, является непубличной, но видна некоторым людям в моем домене.Поскольку он не является общедоступным, я знаю, что будут некоторые аутентификации и авторизации, даже если я использую API для его чтения.

Я нашел эту страницу, но есть кое-что, чего я не понимаю: http://code.google.com/intl/zh-TW/apis/spreadsheets/data/3.0/developers_guide.html#Auth

Он говорит, что мы должны использовать протокол OAuth 2.0, это нормально.Но в процессе авторизации также говорится, что «Google отображает для пользователя диалоговое окно OAuth с просьбой авторизовать ваше приложение для запроса некоторых своих данных». .

Моя веб-страница будет отображатьсянекоторые данные читаются из электронной таблицы.Поэтому, когда кто-нибудь заходит на мою веб-страницу, он отображает диалоговое окно для владельца электронной таблицы с запросом разрешения?Это то, что это значит?

Любой совет будет очень кстати.

Ответы [ 4 ]

4 голосов
/ 31 октября 2012

На самом деле вы пытаетесь выполнить аутентификацию «сервер-сервер» между вашим сервером и Google.

Таким образом, когда посетитель заходит на вашу страницу / страницы, вы извлекаете данные из собственной таблицы без участия третьих лиц.

Возможно, вы найдете то, что ищете, в Сервисной учетной записи Google , а здесь

Кроме того, другое решение (которое гораздо проще реализовать, но может иметь некоторые недостатки) - использовать протокол oauth 2.0 с учетной записью Google dev (получено из API консоли Google).

  1. Если вы этого еще не сделали, создайте учетную запись Google Dev (API консоли Google)
  2. Создайте токен доступа / обновления для своего приложения с «автономным» грантом - это означает, что вы можете отправлять запросы API с вашей учетной записью dev на свою учетную запись в электронной таблице, даже если вы не вошли в свою учетную запись в электронной таблице.
  3. Сохраните созданный вами токен обновления и используйте его для создания токена доступа снова и снова (токены доступа сохраняются в течение 1 часа).

Срок действия токена обновления не должен истекать, но в случае, если это так, вы всегда можете сгенерировать его снова и заменить тот, который у вас был, новым, и продолжать генерировать с ним токены доступа.

Основной недостаток - в случае, если ваш токен обновления будет признан недействительным, вам придется заменить его вручную, поскольку для этого потребуется повторно предоставить доступ к учетной записи dev для доступа к учетной записи электронной таблицы.

Надеюсь, это немного поможет.

Meny

4 голосов
/ 31 декабря 2012

Учебник Google & OAuth: я искал несколько дней, чтобы найти это.Это намного лучше, чем любой другой учебник по стилю OAuth, который я использовал.Это для подключения к Google Docs / Google Drive.

Здесь приведен пример Python, также см. Другие примеры для java и т. Д .: https://developers.google.com/drive/examples/python

Обратите внимание, что вам необходимо добавить токен обновления.Но это работает так, как вы ожидаете.

Также для подключения к использованию электронной таблицы:

          SpreadsheetService service =
                  new SpreadsheetService("MySpreadsheetIntegration-v1");

          service.setHeader("Authorization", "Bearer " + accessToken);
2 голосов
/ 25 февраля 2015

Вы можете использовать новый предоставленный поток oauth2

//flow use httpTransport, clientSecrets, json factory and datastore factory
val flow = new GoogleAuthorizationCodeFlow
  .Builder(httpTransport,JSON_FACTORY,clientSecrets,SCOPES)
  .setDataStoreFactory(datastoreFactory)
  .build()

// authorize
val credential=new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user")

и используйте его с вашим сервисом gdata:

val service:SpreadsheetService=new SpreadsheetService("SpreadsheetIntegration") 
 service.setOAuth2Credentials(credential)

полный пример в Scala: https://github.com/spaced/spreadsheet-oauth2-example

2 голосов
/ 01 ноября 2011

да, протокол OAuth означает, что, когда вы попытаетесь запросить защищенные ресурсы с другой стороны (google), ваш сайт должен перенаправить вашего пользователя на сайт другой стороны, показывая ему диалог входа в систему и пароль Google, с запросом подтверждения этого пользователя.согласен разрешить вашему сайту использовать ресурсы пользователя с другого сайта (Google в вашем случае).Вот как работает OAuth

, и Google нужны учетные данные вашего пользователя, потому что Google не уверен, что пользователь именно этот пользователь (например, если у него нет файлов cookie)

...