Аутентификация 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>