获得一个服务器授权访问令牌的客户端与谷歌分析使用的适当方法



我有一个全局帐户,其中有几个视图,我想在服务器端使用这些视图来嵌入客户端各种视图的仪表板。据我所知,我使用服务器端的服务帐户获得访问令牌,然后可以在需要时将访问令牌发送到客户端。我想知道,这是正确的流程吗?访问令牌应该是每个会话的吗?

这里显示的客户端的授权有一个用于服务器身份验证访问令牌的字段,但是找不到我想要的确切流的文档。基本上,我不确定生成服务器授权访问令牌的正确方法是什么。

[这里][1]是一个如何设置服务器端认证的示例。上面的代码在任何人访问站点时创建一个新的令牌。您可以看到获得访问令牌的端点[这里][2]。

获得工作版本的一般步骤如下:

步骤1:创建服务帐户并下载JSON密钥

步骤2:将服务帐户添加为Google Analytics中的用户

步骤3:使用JSON键数据请求访问令牌

# service-account.py
import json
from oauth2client.client import SignedJwtAssertionCredentials
# The scope for the OAuth2 request.
SCOPE = 'https://www.googleapis.com/auth/analytics.readonly'
# The location of the key file with the key data.
KEY_FILEPATH = 'path/to/json-key.json'
# Load the key file's private data.
with open(KEY_FILEPATH) as key_file:
  _key_data = json.load(key_file)
# Construct a credentials objects from the key data and OAuth2 scope.
_credentials = SignedJwtAssertionCredentials(
    _key_data['client_email'], _key_data['private_key'], SCOPE)
# Defines a method to get an access token from the credentials object.
# The access token is automatically refreshed if it has expired.
def get_access_token():
  return _credentials.get_access_token().access_token

返回客户端:

第4步:加载Embed API库。

<script>
(function(w,d,s,g,js,fs){
  g=w.gapi||(w.gapi={});g.analytics={q:[],ready:function(f){this.q.push(f);}};
  js=d.createElement(s);fs=d.getElementsByTagName(s)[0];
  js.src='https://apis.google.com/js/platform.js';
  fs.parentNode.insertBefore(js,fs);js.onload=function(){g.load('analytics');};
}(window,document,'script'));
</script>

步骤5:添加HTML容器来承载仪表板组件。

<div id="chart-1-container"></div>
<div id="chart-2-container"></div>

步骤6:编写仪表板代码

使用步骤3中获得的访问令牌对Embed API进行授权。

gapi.analytics.ready(函数(){/* **授权用户访问令牌获得服务器端。*/gapi.analytics.auth.authorize ({"serverAuth":{'access_token': '{{ACCESS_TOKEN_FROM_SERVICE_ACCOUNT}}'}});…创建一个返回令牌的端点的额外工作取决于你的后端实现,但演示如何实现的源代码可以在这里找到[2]。[1]: https://ga-dev-tools.appspot.com/embed-api/server-side-authorization/[2]: https://github.com/googleanalytics/ga-dev-tools/blob/abb3c5a18160327a38bf5c7f07437dc402569cac/lib/controllers/server_side_auth.py

我不是很熟悉Google Analytics,但就OAuth而言,访问令牌和刷新令牌的处理应该都在服务器端。客户机接收授权代码并将其提供给服务器,然后服务器获取令牌并使用令牌获取所需的数据。不需要向客户端发送访问令牌。

读这个可能会有帮助,它描述了标准的OAuth流程:https://developers.google.com/identity/protocols/OAuth2

相关内容

最新更新