我有一个在GKE中运行的node.js应用程序,该应用程序需要能够对Cloud Function进行服务器到服务器的调用,该Cloud Function的权限被配置为仅允许在GKE pod上配置的服务帐户才能调用它。因此,基本上,node.js具有一个环境变量GOOGLE_APPLICATION_CREDENTIALS
,该环境变量指向安装在卷上的凭据密钥json文件。
对于本地开发,如果它仅使用存储在gcloud sdk配置中的我的用户帐户凭据,那也很好。
我已经弄清楚了如何使用服务帐户凭据进行身份验证。这是代码,假设import { GoogleAuth } from 'google-auth-library'
const url = 'https://REGION-PROJECT.cloudfunctions.net/RECEIVING_FUNCTION'
const auth = new GoogleAuth({
keyFile: process.env.GOOGLE_APPLICATION_CREDENTIALS,
clientOptions: {
additionalClaims: {
target_audience: url
}
}
})
const client = await auth.getClient()
const res = await client.request({ url })
console.log(res.data)
环境变量包含凭据密钥json文件的路径:
import { JWT } from 'google-auth-library'
const client = new JWT({
keyFile: process.env.GOOGLE_APPLICATION_CREDENTIALS,
additionalClaims: {
target_audience: url
}
})
这种方式略有变化:
cURL
但是我仍然不确定如何在本地开发中使用用户帐户凭据来执行此操作。最接近的解决方案是使用 curl -i https://REGION-PROJECT.cloudfunctions.net/RECEIVING_FUNCTION \
-H "Authorization: bearer $(gcloud auth print-identity-token)"
:
{{1}}
有一种方法,但是如何在javascript中实现呢?