我正试图通过谷歌服务帐户调用谷歌云文档AI。我有为它生成的json键,我通过FixedCredentialsProvider
和GoogleCredentials
对象将它加载到我的应用程序中,因为对于我的用例来说,不可能通过环境变量加载它。这个方法过去是有效的,但现在它抛出了一个UNAUTHORIZED
异常和一些与没有有效OAuth2令牌有关的异常。当我使用GOOGLE_APPLICATION_CREDENTIALS
env变量测试场景时,它运行良好。是否发生了不再允许使用FixedCredentials
方法的更改?我还没有更新sdk,它只是自己停止了。有没有一种新的方法可以通过编程方式加载凭证JSON密钥?
最终检查了SDK源代码以找到答案。通过环境变量加载和使用GoogleCredentials
之间的区别在于,在后一种情况下,它确实不提供OAuth2scope
,这是自上次测试以来谷歌方面对DocumentAI服务的强制要求。使用环境变量加载键来自不同的代码路径,该路径提供了一些默认作用域。当通过GoogleCredentials
加载时,我们可以手动提供相同的范围,如下所示:
GoogleCredentials googleCredentials = GoogleCredentials
.fromStream(new FileInputStream(jsonKeyFile))
.createScoped(DocumentUnderstandingServiceSettings.getDefaultServiceScopes());
DocumentUnderstandingServiceClient client = DocumentUnderstandingServiceClient.create(
DocumentUnderstandingServiceSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(googleCredentials))
.build()
);
DocumentUnderstandingServiceSettings.getDefaultServiceScopes()
返回一个静态变量,该变量包含与环境变量加载方法使用的作用域相同的作用域,该方法反过来允许将DocumentAI与手动创建的GoogleCredentials
一起使用。