2015-01-14 2 views
0

Я кодирую приложение PHP, которое обращается к данным, хранящимся в Google Maps Engine. Я создал идентификатор клиента для веб-приложений в консоли API. Таким образом, я могу разрешить моему приложению получать доступ к моим данным GME с помощью Google API PHP client. Пока нет проблем.Разрешить веб-приложение PHP + приложение GDAL использовать службы Google через OAuth2

Мое веб-приложение в один конкретный момент, вызовет системный двоичный код (ogr2ogr), которому также необходимо получить доступ к данным, хранящимся в Google Maps Engine. Таким образом, я сделал вид, что использовать GME driver и передать в качестве параметров конфигурации:

  • ID клиента, секрет клиента и ключ API (с идентификатором клиента, я создал в консоли API)
  • аутентификации маркер и обновить маркер (с разрешения ответ)

Но здесь возникает проблема:

Когда я пытаюсь, чтобы позвонить ogr2ogr используя предыдущие параметры авторизации, возвращает HTTP 400 ошибки: попытку использовать код авторизации OAuth2 много раз. Похоже, токен обновления, который я передаю, недействителен.

Углубляясь в проблему, я нашел что-то я не понимаю: Google API консоли позволяет создавать идентификатор клиента для веб-приложений, но не делает разницы между стороне клиента и сервера приложения сторонние приложения. И документация Google OAuth2 делает эту разницу:

Таким образом, теоретически, ИД клиента Я создал это для клиента приложения на стороне, и я использую он с серверной стороны приложения (PHP)

Итак, мои вопросы:

  • Как я могу создать идентификатор клиента в консоли API, который можно использовать как для: PHP приложений и ogr2ogr двоичная (я тестировал ogr2ogr бинарного с ID клиента для установленных приложений и она прекрасно работает, но этот идентификатор клиента нельзя использовать для приложения PHP).
  • Почему консоль API не влияет на идентификатор клиента для клиентских веб-приложений и серверных веб-приложений, как это делает документация? Ясно, что я что-то недопонимаю. Например, this tutorial использует идентификатор клиента для веб-приложений для PHP кода (но только для веб-приложения, а не для вызова другой программы, которая также нуждается в авторизации)

Большое спасибо заранее

ответ

1

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

Вы можете сделать это одним из следующих способов:

  1. Просто добавьте параметр access=<your access token> в поле «Имя файла», который вы используете с ogr2ogr (строка начинается с «GME:»).
  2. Вы также можете использовать переменную среды GME_ACCESS_TOKEN.

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

Это (сейчас) также задокументировано в http://trac.osgeo.org/gdal/wiki/GMEDriver

+0

Прохладный! Нужно ли мне обновлять GDAL с багажника и перекомпилировать его, чтобы использовать это? – jorgeas80

+0

Работал как очарование! Большое спасибо! – jorgeas80