You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Node.js获取AdWords API刷新令牌的技术问询

解决Node.js环境下AdWords API刷新令牌获取的问题

我之前折腾AdWords API的时候也踩过这个坑,官方的封装库把OAuth流程藏得太深,新手确实容易摸不着头脑。而且AdWords的OAuth流程和YouTube的细节上还有点不一样,下面我把自己摸索出来的方法和逻辑拆解给你:

一、先搞懂AdWords OAuth的核心逻辑

AdWords用的是OAuth 2.0授权码流程,要拿到刷新令牌,必须走完完整的三步:

  • 生成授权URL,引导用户用AdWords关联的Google账号授权你的应用
  • 用户授权后,Google返回一个一次性的授权码
  • 用授权码去交换「访问令牌+刷新令牌」,后续就靠刷新令牌定期续期访问令牌

二、手动实现刷新令牌获取(比看库源码更直观)

如果你想搞透底层逻辑,完全可以不用封装库,用google-auth-library自己写:

  1. 准备OAuth客户端信息
    先去Google Cloud Console创建项目、启用AdWords API,然后创建「桌面应用」类型的OAuth客户端ID(Node脚本属于命令行应用,选这个类型),拿到client_id和client_secret。

    初始化客户端:

    const { OAuth2Client } = require('google-auth-library');
    const oAuth2Client = new OAuth2Client(
      '你的CLIENT_ID',
      '你的CLIENT_SECRET',
      'urn:ietf:wg:oauth:2.0:oob' // 桌面应用固定回调URL,不用改
    );
    
  2. 生成授权URL(关键参数别漏)

    const authUrl = oAuth2Client.generateAuthUrl({
      access_type: 'offline', // 必须加这个!否则拿不到刷新令牌
      scope: 'https://www.googleapis.com/auth/adwords', // AdWords专属权限范围
    });
    console.log('请打开下面的URL授权:', authUrl);
    

    这里access_type: 'offline'是重中之重,很多人就是漏了这个参数,导致Google只返回访问令牌,不给刷新令牌。

  3. 用授权码交换令牌
    打开上面的URL,登录你的AdWords经理账号(注意:必须是经理账号,普通广告账号没法生成有效令牌),授权后会得到一串授权码。把这串码输入到脚本里:

    const readline = require('readline').createInterface({
      input: process.stdin,
      output: process.stdout
    });
    
    readline.question('请输入授权码:', async (code) => {
      const { tokens } = await oAuth2Client.getToken(code);
      console.log('拿到的令牌信息:', tokens);
      // tokens里会包含refresh_token,把它存到配置文件或数据库里,别硬编码
      oAuth2Client.setCredentials(tokens);
      readline.close();
    });
    

    运行脚本,就能拿到包含刷新令牌的完整令牌对象了。

三、理解封装库的自动刷新逻辑

比如常用的node-adwords或者google-ads-api库,其实是把上面的流程封装了:

  • 你初始化库的时候传入client_id、client_secret和refresh_token
  • 当访问令牌过期时,库会自动调用Google的令牌刷新接口,用你存的refresh_token换全新的访问令牌,这个过程是后台自动完成的,所以你看不到显式的刷新代码

四、踩过的几个坑

  • 必须用AdWords经理账号授权:普通广告账号没有API授权权限,一定要关联到经理账号
  • 刷新令牌的有效期:只要用户不主动撤销授权、你不重置客户端ID,刷新令牌是长期有效的,所以要安全存储
  • 权限范围别选错:一定要用https://www.googleapis.com/auth/adwords,别用其他API的scope

希望这些内容能帮你解决刷新令牌的问题!

内容的提问来源于stack exchange,提问作者Alex Ironside

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:39:13