Пример Java GCP IAP, возвращающий ComputeEngineCredentials вместо ServiceAccountCredentials

контекст

У меня есть несколько служб в гибкой среде Google AppEngine, взаимодействующих через API, и в то время как я использую IAP для управления доступом пользователей. Я должен программно аутентифицировать каждый сервис с токеном Bearer JWT.

проблема

В своем приложении Java я использую код, предоставляемый Google для аутентификации служб IAP, который вы можете найти здесь: https://cloud.google.com/iap/docs/authentication-howto

Проблема в этом блоке кода:

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 объект ответа.

Все предложения приветствуются. Заранее спасибо за величайшее сообщество когда-либо.

1 ответ

Вы на самом деле не упоминаете природу трудности, с которой вы столкнулись. Учетная запись службы гибкой среды App Engine автоматически создается в проекте GCP. Вы пытаетесь создать учетную запись службы гибкой среды App Engine, которая является отдельной учетной записью службы App Engine по умолчанию. "Учетные данные возврата (ServiceAccountCredentials)"; оператор использует приведение для возврата ServiceAccountCredentials; это должно быть хорошо.

Строка: GoogleCredentials.getApplicationDefault(). CreateScoped(Collections.singleton(IAM_SCOPE) создает объект GoogleCredentials, для его работы не требуется файл учетной записи службы JSON.

Другие вопросы по тегам