Авторизация запросов с помощью OAuth 2.0 в Google Spreadsheet API

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

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

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

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

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

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


person bobo    schedule 01.11.2011    source источник


Ответы (4)


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

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

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

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

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

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

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

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

Meny

person Meny Issakov    schedule 31.10.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);
person eddyparkinson    schedule 31.12.2012

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

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

person javagirl    schedule 01.11.2011
comment
я немного смущен. Люди, которые посещают мою веб-страницу, являются просто гостями, и у них нет учетной записи Google в моем домене Google App. Я хочу, чтобы моя веб-страница была общедоступной, хотя необходимые ей данные взяты из частного документа электронной таблицы Google в моем домене приложения Google. - person bobo; 01.11.2011
comment
Применяется ли OAuth только для чтения данных из чужих доменов? Я читаю данные из своего собственного домена, над которым я контролирую, полезен ли OAuth в моей ситуации? - person bobo; 01.11.2011
comment
Я не уверен, возможно, в вашем случае вам понадобится огромная настройка oauth ... чтобы он прозрачно (для пользователя) выполнял все запросы-перенаправления, а затем отображал ваши данные. Но на самом деле это должен быть протокол, помогающий вам показывать на вашем сайте данные из учетных записей google (facebook и т. Д.) Ваших пользователей. для вашей задачи возможно вам нужно выбрать другое решение - person javagirl; 01.11.2011
comment
@bobo общедоступно для просмотра, хотя данные, которые ему нужны, взяты из частного. Вы сами себе противоречите, просьба уточнить требования. - person kan; 01.11.2011

Вы можете использовать новый предоставленный поток 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

person Adi Stadelmann    schedule 25.02.2015