Подтвердить что ты не робот

Настройка использования AppIdentityService на сервере разработки

У меня есть приложение, которое в настоящее время использует com.google.appendinge.api.appidentity.AppIdentityService для облегчения аутентификации и авторизации для использования того же приложения [т.е. той же учетной записи] с помощью API SpreadsheetService. Отлично работает в режиме производства, развернутом в среде GAE. Но по понятным причинам он не работает (ошибка аутентификации, не удивительно) работает в моей среде разработки приложений.

Мой вопрос: возможно ли и "поддерживается" настроить один локальный сервер разработки для использования необходимой информации о ключах и сертификатах, чтобы позволить AppIdentityService работать по назначению?

Я прочитал статью https://sites.google.com/site/oauthgoog/authenticate-google-app-engine-app, и я понимаю, что это возможно, но я ошибочно понимаю ключевые моменты и буду признателен за любые отзывы и относительно этого.

В идеальном мире я бы хотел, чтобы мой тест env максимально точно воспроизводил режим производства. Я также рассматриваю возможность использования "обычной" аутентификации веб-приложений oauth2 в моем тестовом env, но предпочитаю придерживаться с помощью AppIdentityService, если это вообще возможно.

Я подозреваю, что класс com.google.appengine.api.appidentity.dev.LocalAppIdentityService в appengine-api-stubs.jar является предполагаемым методом, но кто-то еще также использовал его для обеспечения аутентификации AppIdentityService на сервере разработки? Мое первоначальное предположение заключается в том, что замена класса com.google.appengine.api.appidentity.IAppIdentityServiceFactoryProvider, найденного в com.google.appengine.spi.FactoryProvider, на использование моего собственного класса factory с использованием вышеуказанного класса LocalAppIdentityService. Или я лаяю неправильное дерево?

Использование GAE SDK 1.8.8 для Java.

4b9b3361

Ответ 1

При работе под локальным dev-сервером API-интерфейс Identity API приложения GAE вызывает библиотеку GoogleCredentials для получения учетных данных приложения по умолчанию.

  • Проверяется переменная среды GOOGLE_APPLICATION_CREDENTIALS. Если указанная переменная указана, она должна указывать на файл, который определяет учетные данные. Самый простой способ получить учетные данные для этого Целью является создание учетной записи службы с помощью Google Developers Консоль в разделе API и Auth, в подразделе Учетные данные. Создание учетной записи службы или выберите существующий, и выберите Создать новый ключ JSON. Задавать переменная среды на путь загруженного файла JSON.
  • Если вы установили Google Cloud SDK на свой компьютер и выполнили команду gcloud auth login, ваша личность может использоваться как прокси для проверки API-интерфейсов, вызывающих код с этой машины.
  • Если вы работаете в приложении Google App Engine, будет использоваться встроенная учетная запись службы, связанная с приложением.
  • Если вы работаете с продуктом Google Compute Engine, встроенная учетная запись службы, связанная с экземпляром виртуальной машины будет использоваться.
  • Если ни одно из этих условий не является истинным, произойдет ошибка.

Похоже, что вариант №2, пожалуй, самый простой для вас (запустите gcloud auth login, чтобы ваш код использовал вашу учетную запись Google для аутентификации при запуске локально), но вы также можете сделать # 1.

Ответ 2

Я работал с сервером GAE PHP dev и имел ту же проблему, что и служба AppIdentity работала неправильно. В PHP вы можете обойти это, установив $_SERVER['APPLICATION_ID'] в dev~yourapplicationid. Я уверен, что в Java должен быть способ сделать то же самое, вам просто нужно добавить dev~ к началу вашего идентификатора приложения для работы с средой dev.