google-cloud-platform - 如何使用服务帐户获取 application_default_credentials?
问题描述
我有一个 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"
}
服务帐号的密钥格式:
{
"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"
}
解决方案
我知道,这可能是插件的问题。但是,我想知道有没有办法使用谷歌服务帐户设置 application-default-credentials.json 。
答案是不。详情见下文。
您所调用application default credentials
的实际上是 OAuth 客户端机密。这些凭据用于对 Google 帐户进行身份验证(登录)以生成 OAuth 令牌。您不能将这种类型的凭证文件与GOOGLE_APPLICATION_CREDENTIALS
.
应用程序默认凭据 (ADC) 不是凭据,而是定位凭据的策略。
计算机/机器使用服务帐户 JSON 文件向 Google 帐户进行身份验证并生成 OAuth 访问令牌(以及可选的 OIDC 客户端 ID 令牌)。
这两种类型的身份验证产生相似类型的令牌,但如果不使用不同类型的代码并与 Google 身份验证系统集成,则无法互换。
关键是,一个需要人与谷歌交互,另一个需要与谷歌静默交互。
推荐阅读
- list - 如何在 OCaml 中显示惰性列表的结果?
- c++ - 使用 cuda CXX 编译器编译 OpenCV 代码时出现链接错误
- django - Django - 当用户关闭浏览器时如何使会话过期
- android - 设计自定义导航栏
- linux - Git 因 libcharset.so.1 而失败
- python - 由于编码错误,python 上的简单摄氏度到华氏度程序无法正常工作。程序应该通过循环运行
- python - 在 Pyspark 中连接多个 csv 时添加路径位置列
- firebase - Firestore 安全规则 - 权限被拒绝
- nativescript - Nativescript 6 HtmlView字体颜色未应用
- kubernetes - 节点上的 CPU 限制(核心)超过 100%