如何使用服务帐户获取application_default_credentials?

Nir*_*rav 3 google-cloud-platform gcloud

我有一个 Maven 插件,它使用application_default_credentials.json文件对谷歌云服务进行身份验证。

我试图找出使用服务帐户而不是使用我的帐户来获取默认凭据。

我尝试将GOOGLE_APPLICATION_CREDENTIALS环境变量设置为服务帐户凭据文件的路径。但是,该插件不使用此环境变量。

我知道,这可能是插件的问题。但是,我想知道有什么方法可以application-default-credentials.json使用谷歌服务帐户进行设置。

application-default-credentials.json 的格式:

{
  "client_id": "76....408.apps.googleusercontent.com",
  "client_secret": "d-....D0Ty",
  "refresh_token": "1/r............................emnY02",
  "type": "authorized_user"
}
Run Code Online (Sandbox Code Playgroud)

服务帐户的密钥格式:

{
  "type": "service_account",
  "project_id": "ID",
  "private_key_id": "9a4.................................bbaad80",
  "private_key": "-----BEGIN PRIVATE KEY-----\nMI................................e\n-----END PRIVATE KEY-----\n",
  "client_email": "name@project.iam.gserviceaccount.com",
  "client_id": "10..................886",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/name%40project.iam.gserviceaccount.com"
}
Run Code Online (Sandbox Code Playgroud)

Joh*_*ley 5

我知道,这可能是插件的问题。但是,我想知道是否有任何方法可以使用谷歌服务帐户设置 application-default-credentials.json 。

答案是不。详情请参阅下文。

您所调用的application default credentials实际上是 OAuth Client Secrets。这些凭据用于由人员对 Google 帐户进行身份验证(登录)以生成 OAuth 令牌。您不能将这种类型的凭证文件与GOOGLE_APPLICATION_CREDENTIALS.

应用程序默认凭证(ADC)不是凭证,而是定位凭证的策略。

计算机/机器使用服务帐户 JSON 文件对 Google 帐户进行身份验证并生成 OAuth 访问令牌(以及可选的 OIDC 客户端 ID 令牌)。

这两种类型的身份验证会产生类似类型的令牌,但如果不使用不同类型的代码并与 Google 身份验证系统集成,则无法互换。

关键在于,一个需要人类与谷歌交互,另一个则默默地与谷歌交互。