oauth - 为客户端获取服务器身份验证访问 token 以与谷歌分析一起使用的正确方法

标签 oauth oauth-2.0 google-oauth google-analytics-api

我有一个全局帐户,其中包含多个 View ,我想在服务器端使用这些 View 为客户端的各种 View 嵌入仪表板。据我了解,我使用服务器端的服务帐户获取访问 token ,然后可以在需要时将访问 token 发送到客户端。我想知道,这是正确的流程吗?访问 token 应该是每个 session 吗?

客户端授权显示here有一个用于服务器身份验证访问 token 的字段,但找不到有关我想要的确切流程的文档。基本上我不确定生成该服务器身份验证访问 token 的正确方法是什么。任何帮助/指针将不胜感激。

最佳答案

[此处][1] 是如何设置服务器端身份验证的示例。当有人访问该站点时,上述代码会创建一个新 token 。您可以看到获取该访问 token 的端点 [此处][2]。
以下是获得工作版本的一般步骤:
步骤 1 :创建一个服务帐户并下载 JSON key
步骤 2 :在 Google Analytics 中将服务帐户添加为用户
步骤 3 :使用 JSON key 数据请求访问 token

# 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 中获取的访问 token 对 Embed API 进行授权。

gapi.analytics.ready(函数(){

/**
* 使用服务器端获得的访问 token 授权用户。
*/
gapi.analytics.auth.authorize({
'服务器验证':{
'access_token': '{{ ACCESS_TOKEN_FROM_SERVICE_ACCOUNT }}'
}
});
...

创建返回 token 的端点的额外工作取决于您的后端实现,但可以在 [此处][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

关于oauth - 为客户端获取服务器身份验证访问 token 以与谷歌分析一起使用的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32934112/

相关文章:

oauth-2.0 - 管理 Google Sheets API 刷新 token

r - twitter 包的 OAUTH 问题

c# - OAuth 2.0 不适用于本地 IIS

macos - 适用于 Mac 应用程序的 Instagram API

Perl Oauth2 包

java - 为永远不会投入生产的简单应用程序生成 oAuth 同意?

ios - (Spotify iOS SDK) renewSession 总是返回 nil session

java - EWS API (Java) OAuth 不起作用

azure - Azure AD 上的企业应用程序可以分配不同范围的权限吗?

javascript - 客户端 Google OAuth 2.0 在 Instagram 的 WebView 中停滞不前