如何在Python中为Google Analytics Reporting API(REST方法)获取oauth2令牌

如何在Python中为Google Analytics Reporting API(REST方法)获取oauth2令牌,python,google-analytics,google-api,google-oauth,google-api-python-client,Python,Google Analytics,Google Api,Google Oauth,Google Api Python Client,我想通过只接受REST端点的网关路由我的Google Analytics Reporting API请求(代码将在AWS Lambda中)。因为我不能在与网关的交互中使用Client-package方法,所以我需要将API作为REST-ful端点进行查询 官方文件说:(): 我不知道如何在Python中创建oauth2标记。我已经创建了一个服务帐户,并拥有secrets_json,其中包括客户端id和密钥。 然后是本文给出的客户端包方法。但我只需要剩下的方法 使用这些,我如何创建oauth2令牌

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

官方文件说:():

我不知道如何在Python中创建oauth2标记。我已经创建了一个服务帐户,并拥有secrets_json,其中包括客户端id和密钥。 然后是本文给出的客户端包方法。但我只需要剩下的方法


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

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

Oauth2基本上构建为三个调用。我可以给你HTTP调用,我会让你算出Python

授权和授权

您首先需要的是用户的权限。要获得此信息,请在授权服务器上构建一个链接。这是一个HTTP get请求,您可以将其放在普通浏览器窗口中进行测试

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

如果用户接受上述内容,则您将拥有一个授权码

交换代码

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

POST https://accounts.google.com/o/oauth2/token
code=4/X9lG6uWd8-MMJPElWggHZRzyFKtp.QubAT_P-GEwePvB8fYmgkJzntDnaiAI&client_id={ClientId}&client_secret={ClientSecret}&redirect_uri=urn:ietf:wg:oauth:2.0:oob&grant_type=authorization_code
body参数应该如我所示,由&分隔,请求的内容类型是
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"
}
通过将授权标头承载令牌与访问令牌一起添加,或通过在请求中发送access_token=作为参数,可以在对api的所有请求中使用访问令牌

刷新访问令牌

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

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
}

您可以为此使用Oauth2,我在过去做过,但您需要监视它。您将需要授权此代码一次并保存刷新令牌。刷新令牌是长期存在的,它们通常不会过期,但如果过期,您的代码应该能够与您联系,以便您可以再次对其进行授权。如果保存刷新令牌,则可以随时使用最后一步请求新的访问令牌

Oauth2基本上构建为三个调用。我可以给你HTTP调用,我会让你算出Python

授权和授权

您首先需要的是用户的权限。要获得此信息,请在授权服务器上构建一个链接。这是一个HTTP get请求,您可以将其放在普通浏览器窗口中进行测试

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

如果用户接受上述内容,则您将拥有一个授权码

交换代码

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

POST https://accounts.google.com/o/oauth2/token
code=4/X9lG6uWd8-MMJPElWggHZRzyFKtp.QubAT_P-GEwePvB8fYmgkJzntDnaiAI&client_id={ClientId}&client_secret={ClientSecret}&redirect_uri=urn:ietf:wg:oauth:2.0:oob&grant_type=authorization_code
body参数应该如我所示,由&分隔,请求的内容类型是
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"
}
通过将授权标头承载令牌与访问令牌一起添加,或通过在请求中发送access_token=作为参数,可以在对api的所有请求中使用访问令牌

刷新访问令牌

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

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
}

如果您要使用服务帐户,我建议您使用客户端库。如果你不能,我建议你试着把它从客户端库中分离出来,找到他们正在使用的代码。这可能也会有帮助,我祝你好运。服务帐户身份验证不是像这样简单的事情oauth2@DaImTo如果我不使用服务帐户,还有其他方法吗?使用Oauth2并对其进行一次身份验证,保存刷新令牌,并在需要新访问时使用它token@DaImTo我明白,但我该怎么做呢?你能提供一个示例代码吗?这是一个脚本的一部分,意味着自动化过程。因此,没有手动用户身份验证。如果您要使用服务帐户,我建议您使用客户端库。如果你不能,我建议你试着把它从客户端库中分离出来,找到他们正在使用的代码。这可能也会有帮助,我祝你好运。服务帐户身份验证不是像这样简单的事情oauth2@DaImTo如果我不使用服务帐户,还有其他方法吗?使用Oauth2并对其进行一次身份验证,保存刷新令牌,并在需要新访问时使用它token@DaImToI u