首页 > 解决方案 > 从 google.oauth2.Credentials 获取访问令牌

问题描述

目前,我正在为我的 TF2 模型构建异步前端。现在它作为两个服务工作,第一个服务是一个扭曲的服务,第二个服务是一个 TensorFlow 服务。

异步 Web 客户端用于异步查询模型。出于实际原因,我已经将模型部署到 GCP AI 平台中,我可以使用示例中的 python 代码从中获取数据,还可以。

但问题是 Google API 客户端是同步的,我想使用异步客户端。因为,AFAIK,GCP 没有积极支持的异步客户端,所以我试图直截了当并使用 REST。TensorFlow 服务上的模型输入是相同的(我相信 GCP AI 平台在内部使用 TensorFlow 服务)。

要执行异步调用,我需要:

  1. 型号网址。(我有)
  2. 输入数据。(我也有)
  3. 访问令牌。

我看到了一些例子:

import googleapiclient.discovery
credentials = service_account.Credentials.from_service_account_file(
    '/path/to/key.json',
    scopes=['https://www.googleapis.com/auth/cloud-platform'])

但问题是credential.tokenNone所以我不能使用它。

所以我有一个问题:那我怎样才能让访问令牌在其余请求中使用?

或者也许有另一种更好的方法来做到这一点?

我已经看到了以下问题:如何从 google.oauth2.service_account.Credentials 对象的实例中获取访问令牌? 但我认为这有点无关紧要。

标签: pythongoogle-cloud-platformgoogle-oauthtensorflow-serving

解决方案


以下代码设置用于管理来自服务帐户的凭据(OAuth 令牌)的数据结构。此时不请求令牌。

credentials = service_account.Credentials.from_service_account_file(
    '/path/to/key.json',
    scopes=['https://www.googleapis.com/auth/cloud-platform'])

除非需要,否则不会从 Google 身份验证服务器请求令牌。有几个原因: a) 网络调用需要时间——网络故障需要大量时间;b) 令牌过期;c) 令牌被缓存,直到它们(几乎)过期。

要生成令牌,请调用refresh()方法:

import google.auth.transport.requests
request = google.auth.transport.requests.Request()
credentials.refresh(request)

credential.token现在将包含一个 OAuth 访问令牌,否则将引发异常(网络错误等)。


推荐阅读