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

使用Faraday调用Google Analytics API无法获取Access Token

问题排查与解决方案

针对你用Faraday请求Google Analytics OAuth Token时遇到的invalid_request错误,以下是核心排查点和修复方案:

1. 修正Faraday请求的参数编码方式

你当前的请求虽设置了Content-Type: application/x-www-form-urlencoded,但Faraday默认对哈希参数的处理可能未正确转换为表单格式,需显式指定参数的表单编码方式:

修正后的代码示例:

conn = Faraday.new(url: 'https://oauth2.googleapis.com') do |faraday|
  faraday.request :url_encoded # 启用表单编码中间件,确保参数正确转换
end

response = conn.post '/token' do |req|
  req.headers['Content-Type'] = 'application/x-www-form-urlencoded'
  req.body = {
    code: @google_analytics_connection.code,
    client_id: '你的client_id',
    client_secret: '你的client_secret',
    redirect_uri: '你的return_uri',
    grant_type: 'authorization_code'
  }
end

或者手动构建URL编码的表单字符串:

params = Faraday::Utils.build_query({
  code: @google_analytics_connection.code,
  client_id: '你的client_id',
  client_secret: '你的client_secret',
  redirect_uri: '你的return_uri',
  grant_type: 'authorization_code'
})

response = conn.post '/token', params, { 'Content-Type' => 'application/x-www-form-urlencoded' }

2. 检查Google开发者控制台的OAuth配置

  • OAuth同意屏幕类型:若你的应用面向外部用户(非组织内部),需完成Google的应用验证流程,未验证的外部应用会触发安全限制,即使首次授权无警告,token请求阶段仍可能被拦截。
  • API启用状态:确认开发者控制台中已启用目标API(Google Analytics API或Google Analytics Data API,根据你的使用版本选择)。
  • 重定向URI精确匹配:再次核对控制台配置的redirect_uri,必须与请求中的完全一致,包括协议(http/https)、域名、路径、结尾斜杠等细节,大小写也需严格匹配。

3. 验证授权码的有效性

授权码code为一次性使用,若之前已尝试过请求token(即使失败),该code会直接失效,需重新发起授权流程获取新的code后再尝试。

4. 排查敏感信息泄露风险

确保client_secret未被意外暴露在日志或请求链路中,Google的安全政策会拦截存在敏感信息泄露风险的请求。

内容的提问来源于stack exchange,提问作者Muhammed Tüfekyapan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 22:45:21