У меня есть несколько сервисов в гибкой среде Google AppEngine, которые общаются через API, и пока я использую IAP для управления доступом пользователей. Я должен программно аутентифицировать каждую службу с помощью токена Bearer JWT.
В моем приложении Java я использую код, который Google предоставляет для аутентификации служб IAP, который вы можете найти здесь: https://cloud.google.com/iap/docs/authentication-howto#iap_make_request-java
Проблема в этом блоке кода:
GoogleCredentials credentials =
GoogleCredentials.getApplicationDefault().createScoped(Collections.singleton(IAM_SCOPE));
// service account credentials are required to sign the jwt token
if (credentials == null || !(credentials instanceof ServiceAccountCredentials)) {
throw new Exception("Google credentials : service accounts credentials expected");
}
return (ServiceAccountCredentials) credentials;
Метод createScoped возвращает ComputeEngineCredentials, в то время как код ожидает объект ответа ServiceAccountCredentials.
Все предложения приветствуются. Заранее спасибо за самое большое сообщество.
Я думаю, что единственный способ - использовать файл учетной записи службы json ...
Я столкнулся с той же проблемой. Я могу получить правильные данные ServiceAccountCredentials, если у меня установлена переменная среды, указывающая на локальный файл учетных данных json для учетной записи службы, которую я пытаюсь олицетворять (даже если это учетная запись службы по умолчанию для вычислительного движка). Это происходит в экземпляре вычислительного механизма. Удалось ли вам решить проблему?
Я не пытался олицетворять аутентификацию, я просто пытался аутентифицироваться без предоставления файла JSON




На самом деле вы не упоминаете характер проблемы, с которой столкнулись. Учетная запись службы гибкой среды App Engine автоматически создается в проекте GCP. Вы пытаетесь создать учетную запись службы гибкой среды App Engine, которая является отдельной учетной записью службы из Учетная запись службы App Engine по умолчанию. "Вернуть (ServiceAccountCredentials) учетные данные;" оператор использует приведение для возврата ServiceAccountCredentials; все должно быть хорошо.
Строка: GoogleCredentials.getApplicationDefault (). CreateScoped (Collections.singleton (IAM_SCOPE) создает объект GoogleCredentials, для успешного выполнения не требуется файл учетной записи службы JSON.
Вы видели мой комментарий? DefaultCredentialsProvider.java:L195 Есть тест только для стандарта AppEngine
Также перед отливкой проводится проверка объекта ServiceAccountCredentials. Таким образом, он всегда будет генерировать исключение "Google credentials : service accounts credentials expected"
Да, учетная запись службы по умолчанию создается автоматически, но она бесполезна в гибкой среде Java. Строка, которую вы заметили, возвращает ComputeEngineCredentials, потому что учетная запись службы по умолчанию не может быть использована (т. Е. Переменная среды не установлена)
Можно установить переменные среды. Для получения дополнительной информации вы можете взглянуть на «Определение переменных среды» подраздел на странице «Файл конфигурации app.yaml».
Да, я знаю, но если я установлю их вручную, я не смогу использовать учетную запись службы по умолчанию (предполагается, что путь к файлу автоматически обрабатывается с помощью gcp). Как и для других языков, мне не нужно устанавливать env var для использования учетных данных по умолчанию.
Чтобы создать ключи для своих учетных записей служб, включая учетную запись службы по умолчанию для приложения App Engine, используйте страницу «Учетные записи служб» в консоли GCP, чтобы просмотреть и изменить свои учетные записи служб. Вы можете найти соответствующие подробности в документации «Контроль доступа» страница.
Это происходит потому, что я запускаю свою службу Java в гибкой среде: github.com/googleapis/google-auth-library-java/blob/master/… Но тогда как мы можем аутентифицироваться в гибкой среде Java?