在不使用环境变量的情况下使用 Java 进行 Google API 身份验证

2022-09-02 01:58:01

我设置了一个简单的测试应用程序来与Google的自然语言API进行交互。我创建了一个服务帐户,并下载了 JSON 凭据。我在本地开发计算机上运行,因此我将环境变量设置为指向 JSON 文件。需要明确的是,这是有效的:应用程序成功进行了一些API调用并显示结果。GOOGLE_APPLICATION_CREDENTIALS

我想消除对环境变量的依赖。如何在应用程序中使用 JSON 文件的已知位置(或任何其他方法)使用这些凭据创建?LanguageServiceClient


答案 1

你可以注册是这样的:

DatastoreOptions options = DatastoreOptions.newBuilder()
  .setProjectId(PROJECT_ID)
  .setAuthCredentials(AuthCredentials.createForJson(
    new FileInputStream(PATH_TO_JSON_KEY))).build();

这有帮助吗?


答案 2

您始终可以将完整的 json 文件作为字符串传递,如下所示:

        CredentialsProvider credentialsProvider;
        String credentials = "[YOUR JSON FILE CONTENT]";

        try {

            credentialsProvider
                    = FixedCredentialsProvider.create(
                            ServiceAccountCredentials.fromStream(new ByteArrayInputStream(credentials.getBytes())));          

        } catch (IOException ex) {
            Logger.getLogger(GoogleNLPService.class.getName()).log(Level.SEVERE, null, ex);
        }

        LanguageServiceSettings.Builder languageServiceSettingsBuilder
                = LanguageServiceSettings.newBuilder();

        LanguageServiceSettings languageServiceSettings = languageServiceSettingsBuilder.setCredentialsProvider(credentialsProvider).build();

        List<NamedEntity> entities = new ArrayList<>();
        try (LanguageServiceClient language = LanguageServiceClient.create(languageServiceSettings)) {

         ...

        }

或者,您可以将 json 文件放在资源文件夹中,然后将其读取为:

    credentialsProvider
            = FixedCredentialsProvider.create(
                    ServiceAccountCredentials.fromStream(new FileInputStream("./src/main/resources/FILENAME.json")));

但是,当我在Heroku中上传我的应用程序时,这个相对路径不起作用。因此,我决定使用字符串解决方案。


推荐