Com.google.auth.oauth2.GoogleAuthException: ошибка при получении токена доступа для сервисного аккаунта: поток закрыт. при загрузке изображения в облачное хранилище

Я уже использую облачное хранилище Google в течение нескольких месяцев, и эта проблема внезапно возникла 30 января 2023 года, и я не знаю, почему.

Я настроил учетные данные, используя ключ .json из учетной записи службы облачной платформы IAM Google, и все работает нормально в моей локальной среде. Но когда приложение отправляется в производство в GKE, я получаю сообщение об ошибке

Caused by: java.io.IOException: Error getting access token for service account: Stream is closed, iss: [email protected]
    at com.google.auth.oauth2.ServiceAccountCredentials.refreshAccessToken(ServiceAccountCredentials.java:605) ~[google-auth-library-oauth2-http-1.4.0.jar!/:na]
    at com.google.auth.oauth2.OAuth2Credentials$1.call(OAuth2Credentials.java:257) ~[google-auth-library-oauth2-http-1.4.0.jar!/:na]
    at com.google.auth.oauth2.OAuth2Credentials$1.call(OAuth2Credentials.java:254) ~[google-auth-library-oauth2-http-1.4.0.jar!/:na]
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
    at com.google.common.util.concurrent.DirectExecutor.execute(DirectExecutor.java:31) ~[guava-31.0.1-jre.jar!/:na]
    at com.google.auth.oauth2.OAuth2Credentials$AsyncRefreshResult.executeIfNew(OAuth2Credentials.java:580) ~[google-auth-library-oauth2-http-1.4.0.jar!/:na]
    at com.google.auth.oauth2.OAuth2Credentials.asyncFetch(OAuth2Credentials.java:220) ~[google-auth-library-oauth2-http-1.4.0.jar!/:na]
    at com.google.auth.oauth2.OAuth2Credentials.getRequestMetadata(OAuth2Credentials.java:170) ~[google-auth-library-oauth2-http-1.4.0.jar!/:na]
    at com.google.auth.oauth2.ServiceAccountCredentials.getRequestMetadata(ServiceAccountCredentials.java:1018) ~[google-auth-library-oauth2-http-1.4.0.jar!/:na]
    at com.google.auth.http.HttpCredentialsAdapter.initialize(HttpCredentialsAdapter.java:96) ~[google-auth-library-oauth2-http-1.4.0.jar!/:na]
    at com.google.cloud.http.HttpTransportOptions$1.initialize(HttpTransportOptions.java:159) ~[google-cloud-core-http-2.4.0.jar!/:2.4.0]
    at com.google.cloud.http.CensusHttpModule$CensusHttpRequestInitializer.initialize(CensusHttpModule.java:109) ~[google-cloud-core-http-2.4.0.jar!/:2.4.0]
    at com.google.api.client.http.HttpRequestFactory.buildRequest(HttpRequestFactory.java:91) ~[google-http-client-1.41.2.jar!/:1.41.2]
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:521) ~[google-api-client-1.33.1.jar!/:1.33.1]
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:455) ~[google-api-client-1.33.1.jar!/:1.33.1]
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:565) ~[google-api-client-1.33.1.jar!/:1.33.1]
    at com.google.cloud.storage.spi.v1.HttpStorageRpc.create(HttpStorageRpc.java:311) ~[google-cloud-storage-2.4.4.jar!/:2.4.4]
    at com.google.cloud.storage.StorageImpl.lambda$internalCreate$2(StorageImpl.java:198) ~[google-cloud-storage-2.4.4.jar!/:2.4.4]

при загрузке изображения в облачное хранилище Google

Я понятия не имею, почему и как решить эту проблему, я пробовал так много разных способов, например, изменить ключ учетной записи службы json, попытаться изменить кластер и другим способом. но до сих пор не могу решить эту проблему

 Credentials credentials = GoogleCredentials.fromStream(new ByteArrayInputStream(Base64.getDecoder().decode(base64Credentials)))
                .createScoped(Collections.singletonList(StorageScopes.DEVSTORAGE_FULL_CONTROL));

        return StorageOptions.newBuilder().setCredentials(credentials)
                .setTransportOptions(HttpTransportOptions.newBuilder().
                        setConnectTimeout(300000)
                        .build())
                .setProjectId(projectId).build().getService();

а вот код для загрузки в облачное хранилище Google

 storage.create(BlobInfo
                .newBuilder(cloudStorageProperties.getBucketName(), filename)
                .setAcl(listAcl)
                .setContentType(FileUtils.getMimeType(extension))
                .build(), content);

и вот библиотека Google, которую я использовал для идентификатора своего градиента

 implementation platform('com.google.cloud:libraries-bom:24.4.0')
    implementation 'com.google.cloud:google-cloud-storage'

Я пытаюсь решить проблему с загрузкой изображения в облачное хранилище Google с помощью клиентской библиотеки Google, поэтому я надеюсь, что мое приложение может работать как обычно, может загружать изображение в облачное хранилище Google.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
134
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

После нескольких попыток, наконец, я могу решить эту проблему, используя причал вместо нетти.

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