首页 > 解决方案 > 在 GCP 环境外验证 Google Cloud 函数调用

问题描述

我试图在 In Contact Studio 上调用谷歌云功能来实现我的 IVR 呼叫中的逻辑,但我无法做到这一点,因为我已经关闭了对我的云功能的公共访问,现在我不知道如何对呼叫进行身份验证。我尝试使用命令gcloud auth print-identity-token来获取ID_TOKEN但是这个 ID_TOKEN 每次都会刷新,我不能一次又一次地使用它,所以有什么方法可以在我每次尝试使用一个简单的调用这个函数时生成一个 ID_TOKEN API调用??

或者

有没有其他方法可以解决我的问题?

我尝试过的方法:-

我已经阅读了这份文档:- https://cloud.google.com/functions/docs/securing/authenticating#end-users

我使用的是最终用户的访问方式,但这是通过使用浏览器登录生成访问令牌的一种方式,我想通过代码完成所有操作,因为它将用作 IVR 的后端代码(调用协助各种任务的工具),在这种方法中,我们也得到一个访问令牌而不是 ID_TOKEN,而要调用一个函数,我们需要一个 ID_TOKEN 而不是访问令牌。

其次,我在使用我的谷歌帐户登录的谷歌云外壳上尝试了该gcloud auth print-identity-token命令,因此它生成了 JWT 令牌并将其用作承载令牌并且该功能有效,但是我如何在 GCP 之外生成令牌或获取通过代码频繁间隔。

我想要一种程序方式(NodeJS)而不是 UI 方式,因为我需要将它附加到我的程序后端,而我在互联网上经历的所有方式都只有通过 UI,没有其中有一个用于外部 GCP 环境的程序方式,所以我需要在这种情况下的帮助。

标签: authenticationgoogle-cloud-platformhttpsoauth-2.0google-cloud-functions

解决方案


正如 John 所说,您可以使用 Google Doc 代码示例来执行 URL 调用:该库生成一个安全的 HTTP 客户端来生成对您的端点的请求。

如果您想生成令牌并自己使用它,您可以使用这段代码

    const {GoogleAuth} = require('google-auth-library');
    const auth = new GoogleAuth()
    auth.getIdTokenClient("").then(client => {
        client.idTokenProvider.fetchIdToken("audience").then(token => {
            console.log(token)
        })
    })

推荐阅读