如何在Python中获取oauth2token for Google分析报告API(REST方法)

2024-04-26 21:32:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我想通过一个只接受REST端点的网关来路由我的Google Analytics Reporting API请求(代码将在AWS Lambda)。因为我不能在与网关的交互中使用客户机包方法,所以我需要将API作为REST-ful端点进行查询。在

官方文件是这样写的(Link):

Authorization: Bearer {oauth2-token}

GET https://www.googleapis.com/analytics/v3/data/ga
  ?ids=ga:12345
  &start-date=2008-10-01
  &end-date=2008-10-31
  &metrics=ga:sessions,ga:bounces

我不知道在Python中创建oauth2令牌。我已经创建了一个服务帐户,并拥有secrets_json,其中包括客户机id和密钥。 那么这个link中给出的客户端包方法就可以工作了。但我只需要休息法!在

使用这些,如何创建oauth2令牌?在


Tags: 方法代码awsrestapi路由网关date
1条回答
网友
1楼 · 发布于 2024-04-26 21:32:09

您可以使用Oauth2来实现这一点,我在过去已经做过了,但是您需要监视它。您将需要授权此代码一次并保存刷新令牌。刷新令牌的寿命很长,通常不会过期,但如果过期,代码应该能够与您联系,以便您可以再次授权它。如果保存刷新令牌,则可以随时使用最后一步请求新的访问令牌。在

Oauth2基本上被构建成三个调用。我可以给你HTTP调用,我会让你计算出PythonGoogle 3 Legged OAuth2 Flow

授权和授权

你首先需要的是用户的权限。在授权服务器上建立一个链接。这是一个httpget请求,您可以将它放在普通浏览器窗口中进行测试。在

GET https://accounts.google.com/o/oauth2/auth?client_id={clientid}&redirect_uri=urn:ietf:wg:oauth:2.0:oob&scope=https://www.googleapis.com/auth/analytics.readonly&response_type=code

关于重定向uri的说明。如果你在服务器上运行这个程序,那么使用urn:ietf:wg:oauth:2.0:oob它基本上告诉服务器返回代码的来源。如果你在一个网站上运行,你可以提供一个url到将要处理响应的页面的url。在

如果用户接受上述内容,那么您将拥有一个授权代码。在

交换码

接下来需要做的是交换由上述响应返回的授权码,并请求访问令牌和刷新令牌。这是一个http post调用

^{pr2}$

body参数应该如我所示,用amp;分隔,请求的内容类型是application/x-www-form-urlencoded

响应

{
"access_token" : "ya29.1.AADtN_VSBMC2Ga2lhxsTKjVQ_ROco8VbD6h01aj4PcKHLm6qvHbNtn-_BIzXMw",
"token_type" : "Bearer",
"expires_in" : 3600,
"refresh_token" : "1/J-3zPA8XR1o_cXebV9sDKn_f5MTqaFhKFxH-3PUPiJ4"
}

访问令牌可以在所有对api的请求中使用,方法是使用访问令牌添加授权头承载令牌,或者在请求中发送access_token=作为参数。在

刷新访问令牌

刷新令牌的寿命很长,它们不应该过期,所以您的代码应该能够处理这些问题,但通常它们永远都是好的。访问令牌仅在一小时内有效,您需要请求新的访问令牌。在

POST https://accounts.google.com/o/oauth2/token
client_id={ClientId}&client_secret={ClientSecret}&refresh_token=1/ffYmfI0sjR54Ft9oupubLzrJhD1hZS5tWQcyAvNECCA&grant_type=refresh_token

回应

{
"access_token" : "ya29.1.AADtN_XK16As2ZHlScqOxGtntIlevNcasMSPwGiE3pe5ANZfrmJTcsI3ZtAjv4sDrPDRnQ",
"token_type" : "Bearer",
"expires_in" : 3600
}

相关问题 更多 >