我的客户运营一个实现 Google Analytics(跟踪)的网站。
她想向利益相关者报告一些核心统计数据(综合浏览量)。
利益相关者不应有权访问我客户的 Google (Analytics) 帐户。
是否可以使用 Google Analytics API 向未使用自己的 Google 帐户登录的用户报告?
更新/已解决
我发现实现这一点的最简单方法是使用 python 获取“承载”访问 token 。 您只需要一个 Google 服务帐户和一个私钥(API 和身份验证 > 凭据)。 让您的 javascript 客户端从您的服务器请求访问 token 并使用 gapi.auth.setToken方法进行授权。现在您可以调用类似 gapi.client.analytics.management.accounts.list 的方法.
注意:您确实需要在 developer console 中激活 Analytics API我还必须使用 openssl 创建一个 PEM 文件为了让 rsa 模块接受 key 。
这是我使用的 python 代码(简化)。
from os import path
import base64
import rsa
import json
import calendar
import datetime
import urllib
iat = calendar.timegm(datetime.datetime.utcnow().utctimetuple())
exp = iat + 3600
header = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9" # {"alg":"RS256","typ":"JWT"}
claimset = {
'iss': "<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="672a3e38232231222b28372235382624242832293327030211020b081702154900140215110e0402060404081209134904080a" rel="noreferrer noopener nofollow">[email protected]</a>",
'scope': "https://www.googleapis.com/auth/analytics.readonly",
'aud': "https://accounts.google.com/o/oauth2/token",
'exp': exp,
'iat': iat
}
claimset = json.dumps(claimset).encode('utf-8')
claimset = base64.urlsafe_b64encode(claimset)
signature = "%s.%s" % (header, claimset)
signature = rsa.sign(signature.encode('utf-8'), rsa.PrivateKey.load_pkcs1(open(PATH_TO_PRIVATE_KEY).read(), format='PEM'), 'SHA-256')
signature = base64.urlsafe_b64encode(signature)
postdata = {
'grant_type': "urn:ietf:params:oauth:grant-type:jwt-bearer",
'assertion': "%s.%s.%s" % (header, claimset, signature)
}
response = json.loads(urllib.urlopen("https://accounts.google.com/o/oauth2/token", urllib.urlencode(postdata)).read())
print response
最佳答案
您应该查看Using OAuth 2.0 for Server to Server Applications 。
通过将服务帐户电子邮件作为用户添加到您的客户 Google 分析帐户,只需为其提供简单的读取访问权限即可。然后,您将能够使用服务帐户访问 Google Analytics API 并显示客户想要的统计信息。无需登录,他们只能看到您选择从 Google Analytics API 中提取的信息。
关于python - Google Analytics API - 我可以使用自己的 Google 帐户向其他人显示报告吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23906486/