我在Ruby on Rails项目中有一个自定义仪表板,其中包含从Google Analytics收集的数据。我使用Google Analytics Reporting V4 API和服务帐户进行身份验证。
如果我不模拟用户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 - #<Signet::AuthorizationError: Authorization failed. Server message:
{
"error": "unauthorized_client",
"error_description": "Client is unauthorized to retrieve access tokens using this method."
}>
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网站将服务帐户添加为用户,您需要在帐户级别执行此操作,它必须是帐户级别。
我不确定我是否理解你在做什么,就冒充而言。 我不是 ruby 开发人员,但您的代码看起来不像我在这里找到的示例。