如何向Google Analytics报告API v4进行身份validation

使用Node.js客户端库validationGoogle Analytics报告API v4时遇到了麻烦。 我尝试了所有的方法,从JWT(服务令牌:JSON&P12),API密钥和OAuth 2.0开始,但是我从来没有成功通过authentication。

我在我的开发人员控制台中激活了API,创build了ID并授予了我的Google Analytics(分析)属性和视图的权限。 我成功获取了授权和我的服务帐户的访问令牌,但我不知道如何使用它来validationAnalytics Reporting API v4。

我卡在401错误消息的前面:“该请求没有有效的身份validation凭据”。 我尝试使用JWT模拟用户,但然后服务帐户是未经授权的。

使用Node.js客户端库和JWT身份validation:

var google = require('googleapis.js'); var viewID = 'XXXXXXXXX'; // Google Analytics view ID var key = require('service_account.json'); // Service account var jwtClient = new google.auth.JWT(key.client_email, null, key.private_key, ['https://www.googleapis.com/auth/analytics.readonly'], null); var oauth2Client = new google.auth.OAuth2(); jwtClient.authorize(function(err, result) { if (err) { console.log('Unauthorize'); console.log(err); return; } oauth2Client.setCredentials({ access_token: result.access_token }); //Need to authenticate somewhere near here var analytics = google.analyticsreporting('v4'); //Or here var req = { reportRequests: [ { viewId: viewID, dateRanges: [ { startDate: '2016-05-01', endDate: '2016-06-30', },], metrics: [ { expression: 'ga:users', }, { expression: 'ga:sessions', },], },], }; //Maybe here analytics.reports.batchGet(req, function(err, response) { if (err) { console.log('Fail'); console.log(err); return; } console.log('Success'); console.log(response); } ); }); 

以前版本的Node.js客户端库似乎有一个方法来指定客户端,但它消失了,也许不推荐使用。

 withAuthClient(oauth2Client) 

我试图通过API调用或请求中的客户端或令牌,但没有任何作品。

 google.analyticsreporting({ version: 'v4', auth: oauth2Client }); google.analyticsreporting({ version: 'v4', access_token: result.access_token }); 

也许这是一个noob问题,但我不知道该怎么做,我没有看到谷歌api或客户端库文档中的Analytics Reporting v4身份validation相关的任何事情,我发现大多数示例使用Google Analytics API v3。

如果有人设法成功通过Analytics Reporting API v4进行身份validation,请帮助:/

找出我所缺的:

  • Google API客户端库“选项”:

     google.options({ auth: oauth2Client }); //this one is not very optional 
  • 与Google Analytics Reporting API v4文档不同,使用客户端库的查询必须包含头文件,以便为每个请求指定一个客户端(感谢CVarisco注意到客户端库文档不准确..):

     var request ={ 'headers': {'Content-Type': 'application/json'}, 'auth': oauth2Client, 'resource': req, }; 

还请注意,在服务器端使用服务帐户进行身份validation的推荐方法是使用auth.getApplicationDefault。

https://developers.google.com/identity/protocols/application-default-credentials

我们build议在下列任何情况下使用应用程序默认凭证:
…略…
– 您正在使用与云计划相关联的数据访问API,或以其他方式将范围扩展到整个应用程序,而不是个人用户数据。 对于涉及用户数据的调用,最好使用最终用户明确同意访问的授权stream程(请参阅使用OAuth 2.0访问Google API)。