gpt4 book ai didi

java - 无法验证服务帐户 - Google Cloud

转载 作者:行者123 更新时间:2023-12-05 03:31:22 25 4
gpt4 key购买 nike

我假设在写作之前我已经用谷歌搜索并阅读了文档,我注意到它在 StackOverflow 上也是一个很受欢迎的讨论,但是已经给出的答案都没有帮助我。

我创建了一个 Google Cloud 帐户来使用 API:Google Vision。

为此,我遵循了创建项目、添加上述 API 并最终使用 key 创建服务帐户的步骤。

我下载了 key ,放在了PC上java工程的一个文件夹里。

然后,因为它是一个 Maven 项目,所以我按照教程中的描述将依赖项添加到 pom。

此时我插入了建议的代码段以开始使用 API。

一切似乎都正常,所有内容都已读取,各种库/接口(interface)已导入。

但是当我尝试运行该程序时出现错误:

The Application Default Credentials are not available. They are available if running in Google Compute Engine. Otherwise, the environment variable GOOGLE_APPLICATION_CREDENTIALS must be defined pointing to a file defining the credentials.

我必须承认我不知道“Google Compute Engine”是什么,但由于有替代方案并且我有一些凭据,我想尝试并遵循它。

所以我按照说明操作:

After creating your service account, you need to download the service account key to your machine(s) where your application runs. You can either use the GOOGLE_APPLICATION_CREDENTIALS environment variable or write code to pass the service account key to the client library.

好的,我尝试了第一种方式,通过环境变量传递凭据:

  • 使用 powershell -> 无响应
$env:GOOGLE_APPLICATION_CREDENTIALS="my key path"
  • 使用 cmd -> 也没有响应
set GOOGLE_APPLICATION_CREDENTIALS=my key path

所以我尝试了第二种方法,使用代码传递凭据,如果我在这里,肯定是其他地方出了问题,事实上我所拥有的只能导入 io.grpc.Context,而其他一切都给出了错误“无法解析符号 ..”。

import com.google.common.collect.Lists;
import io.grpc.Context;

import java.io.FileInputStream;
import java.io.IOException;

public class Main
{
static void authExplicit(String jsonPath)
{
GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream(jsonPath))
.createScoped( Lists.newArrayList("https://www.googleapis.com/auth/cloud-platform"));
Context.Storage storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService();

System.out.println("Buckets:");
Page<Bucket> buckets = storage.list();
for (Bucket bucket : buckets.iterateAll()) {
System.out.println(bucket.toString());
}
}

public static void main(String[] args) throws IOException
{
OCR.detectText();
}
}

(我不认为我可以上传代码屏幕来显示它给我错误的地方,但就是这样)

PS:我也已经安装了 Cloud SDK 并重新启动了 PC,因为一些评论说这样做可以解决问题。

我也尝试手动设置环境变量,但没有任何变化: enter image description here

解决方案

我不知道这一切是否因为我为这个命令行执行的一系列操作而成功,无论如何,为了后代:

  • 使用 json 文件中的电子邮件字段和 json 文件的路径手动填写这些字段,两者都没有引号,然后启动 cmd,粘贴字符串并运行!

gcloud auth activate-service-account your_account_email_id --key-file=json_file_path

它还帮助我在之后重新启动了 PC。

最佳答案

请考虑阅读 ImageAnnotationClient 类级别 javadocs , 它为您提供有关如何完成身份验证过程的正确指导。我修改了提供的代码以提供完整示例:

// Please, set the appropriate path to your JSON credentials file here
String credentialsPath = "...";
// The credentials could be loaded as well as this.getClass().getResourceAsStream(), for example
GoogleCredentials credentials = GoogleCredentials.fromStream(new FileInputStream(credentialsPath))
.createScoped(Lists.newArrayList("https://www.googleapis.com/auth/cloud-platform"));

// Use that credentials to build your image annotation client
ImageAnnotatorSettings imageAnnotatorSettings =
ImageAnnotatorSettings.newBuilder()
.setCredentialsProvider(FixedCredentialsProvider.create(credentials))
.build()
;

ImageAnnotatorClient imageAnnotatorClient = ImageAnnotatorClient.create(imageAnnotatorSettings);
// Perform the stuff you need to...

您需要在 pom.xml 中提供的唯一依赖项是 this :

<dependency>
<groupId>com.google.cloud</groupId>
<artifactId>google-cloud-vision</artifactId>
<version>2.0.18</version>
</dependency>

无论如何,请考虑引用 pom.xml Cloud Vision 示例中提供。

Cloud Vision 示例存储库也在 Detect 中提供了一些有用的代码片段检测过程本身的类。

确保您用于连接到 Google Cloud 的服务帐号具有必要的权限。

虽然这个解决方案可行,但它有一个缺点,即您可能需要将凭据文件存储在您机器中的某个位置,也许在您的源代码存储库中,等等,并且它可能存在安全风险。如果您从 Google Cloud 运行您的程序,始终建议您向您正在使用的 VM 或服务授予必要的权限并使用默认的应用程序凭据。

GOOGLE_APPLICATION_CREDENTIALS 的使用也可能更可取。如果您尝试使用此变量,请首先尝试使用您的 IDE 提供的机制而不是 cmdPSbash 来配置它,然后查看如果有效。

对于使用最后提到的两个解决方案中的任何一个,您在构建 ImageAnnotatorClient 时不需要提供任何额外信息:

ImageAnnotatorClient imageAnnotatorClient = ImageAnnotatorClient.create();

关于java - 无法验证服务帐户 - Google Cloud,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70656567/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com