Настройка использования 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.
Ответы
Ответ 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.