客户端未经授权使用此方法检索访问令牌

我在Ruby on Rails项目中有一个自定义仪表板,其中包含从Google Analytics收集的数据。 我使用Google Analytics Reporting V4 API和服务帐户进行身份validation。

如果我没有模仿用户authorization.sub = 'xxx@mail.com' ,我的代码运行良好。如果我这样做,我会收到unauthorized_client错误,但不是所有时间。 有时它有效,有时不行。

这是我的代码:

 scope = [Google::Apis::AnalyticsreportingV4::AUTH_ANALYTICS_READONLY] view_id = 'xxxxxx' ENV['GOOGLE_APPLICATION_CREDENTIALS'] = "#{Rails.root}/private/google_analytics_key.json" authorization = Google::Auth::get_application_default(scope) authorization.sub = 'xxx@mail.com' analytics = Google::Apis::AnalyticsreportingV4::AnalyticsReportingService.new analytics.authorization = authorization ... request = Google::Apis::AnalyticsreportingV4::GetReportsRequest.new(report_requests: report_requests) @result = analytics.batch_get_reports(request) 

Rails服务器日志输出:

 Sending HTTP post https://analyticsreporting.googleapis.com/v4/reports:batchGet? Caught error Authorization failed. Server message: { "error": "unauthorized_client", "error_description": "Client is unauthorized to retrieve access tokens using this method." } Error - # Completed 500 Internal Server Error in 149ms (ActiveRecord: 0.4ms) Signet::AuthorizationError (Authorization failed. Server message: { "error": "unauthorized_client", "error_description": "Client is unauthorized to retrieve access tokens using this method." }): 

请记住,服务帐户是虚拟用户。 要使服务帐户能够访问您的Google Analytics(分析)帐户,需要预先授权。 您像对待任何其他用户一样授权服务帐户。 您需要通过Google Analytics网站以用户身份添加服务帐户,您需要在ACCOUNT级别将其设置为ACCOUNT级别。

就模仿而言,我不确定我理解你在做什么。 我不是ruby dev,但你的代码看起来不像我在这里找到的样本。