如何在请求中向Google Cloud Functions发送服务帐户令牌

时间:2019-07-10 10:03:07

标签: google-cloud-platform google-cloud-functions google-cloud-dns

我正在Google Cloud Functions中运行简单功能以更新DNS记录(see code here)。当前,我创建具有roles/dns.admin特权的服务帐户并将其分配给该功能。然后,我依靠Function的beta支持客户端身份验证和授权。

替代方法可能不是为功能提供服务帐户凭据(使用roles/dns.admin),而是在每个请求中传递凭据。

如何在Go运行时中执行此操作-如何在Google API Go客户端中使用请求中的承载令牌?

这两种方法的优缺点?

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

Cloud Function应该能够通过获取默认凭据并将其传递到DNS客户端中来使用其凭据来授权请求​​。

在此处查找更多信息:Setting Up Authentication for Server to Server Production Applications

答案 2 :(得分:0)

我找到了一种将来自请求的访问令牌馈送到Google API Go客户端的方法。这是我构造客户端的方式(r是传入的http.Request):

ctx := context.Background()

auth := r.Header.Get("Authorization")
token := strings.TrimPrefix(auth, "Bearer ")
ts := oauth2.StaticTokenSource(
    &oauth2.Token{AccessToken: token},
)
c := oauth2.NewClient(ctx, ts)

dnsService, err := dns.New(c)

但是经过一番思考之后,我认为这并不是一个好方法:访问令牌不必要强大地赋予了请求者。所以我在最初的问题中选择了第一种方法。