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

时间:2019-06-07 15:21:39

标签: google-cloud-platform gcloud

我有一个maven插件,该插件使用application_default_credentials.json文件对Google云服务进行身份验证。

我试图弄清楚使用服务帐户而不是使用我的帐户来获取默认证书。

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

我知道,该插件可能有问题。但是,我想知道是否可以使用Google服务帐户设置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"
}

服务帐户的密钥格式:

{
  "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"
}

1 个答案:

答案 0 :(得分:2)

  

我知道,该插件可能有问题。但是,我想知道是   有没有办法使用Google设置application-default-credentials.json   服务帐户。

答案是否定的。有关详情,请参见下文。

您所说的select c.tabschema as schema_name, c.tabname as table_name from syscat.columns c inner join syscat.tables t on t.tabschema = c.tabschema and t.tabname = c.tabname where c.colname = 'START_DATE' and c.tabschema='sample' and t.type = 'T' *<AND 'START_DATE' ='2017-05-17' >*--NOT SURE HOW WE DO THIS PART?? order by schema_name, table_name; 实际上是OAuth客户端机密。这些凭据用于人工验证(登录)到Google帐户,以生成OAuth令牌。您不能在UPDATE <ALL RESULTED_TABLES FROM ABOVE QUERY> SET START_DATE = '2017-05-09' WHERE Tables = <ALL RESULTED_TABLES> 中使用这种类型的凭证文件。

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

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

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

关键点是,一个人需要与Google进行交互,而另一个则需要与Google进行静默交互。