首页 文章

如何通过Google Analytics Reporting API v4进行身份验证

提问于
浏览
8

我很难通过Node.js client libraryGoogle Analytics Reporting API v4进行身份验证 . 我尝试了所有方法,从JWT(服务令牌:JSON和P12),API密钥和OAuth 2.0开始,但我从未成功通过身份验证 .

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

我被困在401错误消息前面:“请求没有有效的身份验证凭据” . 我尝试使用JWT模仿用户,但随后服务帐户未经授权 .

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

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问题,但我不知道该怎么做,我没有在Google API或客户端库文档中看到与Analytics Reporting v4身份验证相关的任何内容,我找到的大多数示例都使用了Google AnalyticsAPI v3 .

如果有人成功通过Google Analytics Reporting API v4进行身份验证,请帮助:/

2 回答

  • 0

    找出我遗漏的东西:

    • Google API客户端库“选项”:
    google.options({ auth: oauth2Client }); //this one is not very optional
    
    • 与Google Analytics Reporting API v4文档不同,使用客户端库的查询必须具有标头,以便为每个请求指定客户端(感谢CVarisco,他们注意到,client library documentation并不是非常准确..):
    var request ={
        'headers': {'Content-Type': 'application/json'},
        'auth': oauth2Client,
        'resource': req,
    };
    
  • 7

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

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

    我们建议在以下任何情况下使用应用程序默认凭据:... snip ... - 您正在访问API,其中包含与 Cloud 项目关联的数据或以其他方式限定为整个应用程序而不是个人用户数据 . 对于涉及用户数据的呼叫,最好使用授权流,最终用户明确同意访问(请参阅使用OAuth 2.0访问Google API) .

相关问题