3

我有一个在 GKE 中运行的 node.js 应用程序,它需要能够对云函数进行服务器到服务器调用,该函数的权限配置为仅允许在 GKE pod 上配置的服务帐户调用它。所以基本上,node.js 有一个环境变量GOOGLE_APPLICATION_CREDENTIALS指向安装在卷上的凭证密钥 json 文件。

同样对于本地开发,如果它只使用存储在 gcloud sdk 配置中的我的用户帐户凭据,那就太好了。

我已经弄清楚如何使用服务帐户凭据进行身份验证。下面是代码,假设GOOGLE_APPLICATION_CREDENTIALS环境变量包含凭证密钥 json 文件的路径:

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)

这种方式略有不同:

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)"

所以有一种方法,但我该如何在javascript中做到这一点?

4

0 回答 0