Аутентификация Google DLP API из Java без настройки GOOGLE_APPLICATION_CREDENTIALS?

Я играю с библиотекой Google Cloud DLP Java. Я настроил свои служебные учетные данные и сохранил их в файле JSON в соответствии с инструкциями здесь:

https://cloud.google.com/dlp/docs/libraries.

В документации говорится, что предпочтительным способом аутентификации является установка переменной среды GOOGLE_APPLICATION_CREDENTIALS чтобы указать путь к файлу JSON, который содержит учетные данные. Это не все, что практично в моем случае. У меня есть приложение Spring Boot, где весь код (а также файл JSON с учетными данными) встроен в "толстую банку". Я могу легко использовать загрузчик классов для получения InputStream для ресурса, но я не могу указать на него внутри файла jar из переменной окружения. Также непрактично создавать переменную среды из работающей JVM, не прибегая к таким хакерским атакам, как использование отражения и т. Д.

В некоторых других библиотеках Google Cloud есть классы обслуживания, которые можно инициализировать с помощью GoogleCredentials объект, но я не нашел способ сделать это с библиотекой DLP. Есть ли способ пройти GoogleCredentials в DlpServiceClient?

2 ответа

В конце концов я понял это после того, как немного погуглил. Это работало нормально:

Resource r = new ClassPathResource("/path-to-my-cred-file.json");

GoogleCredentials creds = GoogleCredentials.fromStream(r.getInputStream());    

DlpServiceSettings settings = DlpServiceSettings.newBuilder()
                                    .setCredentialsProvider(FixedCredentialsProvider
                                    .create(creds))
                                    .build();

try (DlpServiceClient dlpServiceClient = DlpServiceClient.create(settings)) {
      ///... other stuff here ...
}

Используя Document AI, у меня сработало следующее:

      GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream("path-to-json-file"))
  .createScoped(Lists.newArrayList("https://www.googleapis.com/auth/cloud-platform"));

DocumentProcessorServiceClient client = DocumentProcessorServiceClient.create(
DocumentProcessorServiceSettings.newBuilder()
  .setEndpoint("eu-documentai.googleapis.com:443")
  .setCredentialsProvider(FixedCredentialsProvider.create(credentials))
  .build()
);
...
ProcessResponse result = client.processDocument(request);

Взято отсюда https://www.googlecloudcommunity.com/gc/AI-ML/DocAI-Response-in-a-single-json-file/mp/491257

Если вы используете maven, «GoogleCredentials» не отображается во время компиляции, а только во время выполнения. Вы должны настроить что-то вроде этого:

      <dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.google.auth</groupId>
            <artifactId>google-auth-library-oauth2-http</artifactId>
            <version>1.11.0</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
Другие вопросы по тегам