为客户端获取服务器身份验证访问令牌以与 google 分析一起使用的正确方法
Proper method of getting a server auth access token for a client to use with google analytics
我有一个全局帐户,其中有多个视图,我想在服务器端使用这些视图来为客户端的各种视图嵌入仪表板。据我了解,我在服务器端使用服务帐户获取访问令牌,然后可以在需要时将访问令牌发送到客户端。我想知道,这是正确的流程吗?访问令牌应该是每个会话吗?
显示的客户端授权 here 有一个服务器授权访问令牌字段,但找不到关于我想要的确切流程的文档。基本上我不确定生成该服务器身份验证访问令牌的正确方法是什么。任何 help/pointers 将不胜感激。
我不是很熟悉 Google Analytics,但就 OAuth 而言,访问令牌和刷新令牌的处理都应该在服务器端进行。客户端接收授权码并将其提供给服务器,然后服务器获取令牌并使用令牌获取必要的数据。不需要向客户端发送访问令牌。
阅读以下描述标准 OAuth 流程的内容可能会有所帮助:
https://developers.google.com/identity/protocols/OAuth2
[此处][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:加载嵌入 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 }}'
}
});
...
创建 returns 令牌的端点的额外工作取决于您的后端实现,但可以在 [此处][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
我有一个全局帐户,其中有多个视图,我想在服务器端使用这些视图来为客户端的各种视图嵌入仪表板。据我了解,我在服务器端使用服务帐户获取访问令牌,然后可以在需要时将访问令牌发送到客户端。我想知道,这是正确的流程吗?访问令牌应该是每个会话吗?
显示的客户端授权 here 有一个服务器授权访问令牌字段,但找不到关于我想要的确切流程的文档。基本上我不确定生成该服务器身份验证访问令牌的正确方法是什么。任何 help/pointers 将不胜感激。
我不是很熟悉 Google Analytics,但就 OAuth 而言,访问令牌和刷新令牌的处理都应该在服务器端进行。客户端接收授权码并将其提供给服务器,然后服务器获取令牌并使用令牌获取必要的数据。不需要向客户端发送访问令牌。
阅读以下描述标准 OAuth 流程的内容可能会有所帮助: https://developers.google.com/identity/protocols/OAuth2
[此处][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:加载嵌入 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 }}' } }); ... 创建 returns 令牌的端点的额外工作取决于您的后端实现,但可以在 [此处][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