使用服务帐户和 oauth2 调用 autoML Google API

Using service accounts and oauth2 to call autoML Google API

我已经使用 autoML API 训练了一个图像分类模型,现在我想创建一个 JAVA 程序来使用该模型对给定图像进行预测。如docs, this API requires the OAuth scope: https://www.googleapis.com/auth/cloud-platform.

中所述

我不需要用户登录,因为我不会使用任何私人数据,所以我决定使用服务帐户并按照 OAuth2 for service accounts 中的步骤生成访问令牌。

过程顺利,收到回复:

    {"access_token": "access_token_string", "expires_in": 3600, "token_type": "Bearer"}

然后,我返回发送 post 请求进行 autoML 预测,并将 header "Authorization" 设置为 "Bearer access_token_string"。 我收到错误消息

{"error": 
   {
   "code": 403,
   "message": "The caller does not have permission",
   "status": "PERMISSION_DENIED"
   }
}

我知道预测请求是正确的,因为我已经使用为网络应用程序生成的 accessToken 进行了尝试(只是想测试一下)。 所以问题出在授权部分,我检查过我的服务帐户是否也具有所有必需的权限。我不知道问题到底出在哪里,有人知道吗?

因此,由于没有答案,我联系了 Google 支持服务,他们告诉我以下请求是正确的,问题在于允许服务帐户访问我的 GCP 项目资源。这一步解释here

我已经完成了这一步,但我应该是第一次错过了一些东西,所以我删除了服务帐户并重新启动了所有步骤,现在可以使用了! 我希望这会对某人有所帮助:)