首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何认证v4

如何认证v4
EN

Stack Overflow用户
提问于 2016-06-13 10:46:33
回答 3查看 5.7K关注 0票数 9

我很难使用谷歌分析报告API v4进行Node.js客户端库身份验证。我尝试了所有方法,从JWT (Service : JSON & P12)、API和OAuth 2.0开始,但我从未成功通过身份验证。

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

我遇到了一条401错误消息:“请求没有有效的身份验证凭据”。我尝试使用JWT模拟用户,但是服务帐户是未经授权的。

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

代码语言:javascript
复制
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客户端库似乎有一个方法来指定客户端,但它消失了,可能被废弃了。

代码语言:javascript
复制
withAuthClient(oauth2Client)

我试图在API调用或请求中传递客户端或令牌,但没有一个有效。

代码语言:javascript
复制
google.analyticsreporting({ version: 'v4', auth: oauth2Client });
google.analyticsreporting({ version: 'v4', access_token: result.access_token });

也许这是一个菜鸟问题,但我不知道该如何做,我在google或客户端库文档中没有看到任何与Analytics报告v4身份验证有关的内容,而且我发现的大多数示例都使用Google v3。

如果有人成功地对Analytics Reporting v4进行了身份验证,请帮助:/

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-15 09:09:49

发现我错过了什么:

  • Google客户端库“选项”: google.options({ auth: oauth2Client });//这个不是很可选的
  • 与v4文档不同,使用客户端库的查询必须有头来为每个请求指定一个客户机(感谢CVarisco注意到,客户端库文档并不是非常准确): var请求={ 'headers':{‘Content’:'application/json'},'auth':oauth2Client,'resource':req,};
票数 9
EN

Stack Overflow用户

发布于 2016-09-22 07:39:32

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

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

建议在下列任何情况下使用应用程序默认凭据: ...snip…

  • 您正在使用与云项目关联的数据访问API,或者以其他方式对整个应用程序进行作用域,而不是个人用户数据。对于涉及用户数据的调用,最好使用授权流,其中终端用户明确同意访问(请参见使用OAuth 2.0访问Google )。
票数 0
EN

Stack Overflow用户

发布于 2019-05-30 18:49:18

我就是这样做的:

您需要在这里为您的应用程序创建凭据:https://console.developers.google.com/apis。这将给您一个客户ID和客户端机密(注意-请确保https://developers.google.com/oauthplayground作为授权重定向uri)。然后转到https://developers.google.com/oauthplayground创建授权令牌。给出的访问令牌应该通过标题和值:“授权”:"Bearer {{AccessToken}}“发送到Google。如果令牌过期,您可以通过点击OAUTH (https://www.googleapis.com/oauth2/v4/token),在查询中发送refresh_token、client_id、client_secret、grant_type和access_type,并在标题中发送“用户代理”:“google游乐场”来检索新的令牌。

如果您陷入困境,请按照他们在这里描述的方式实现google:https://developers.google.com/analytics/devguides/reporting/core/v4/quickstart/web-js。然后,您可以在浏览器中使用开发人员工具来准确地查看在哪里发送的值。

希望这能有所帮助。:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37787748

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档