1

У меня есть пользовательская панель мониторинга в проекте Ruby on Rails с данными, собранными в Google Analytics. I пользователь Google Analytics Отчетность API V4 и учетная запись службы для аутентификации.Клиент неавторизован для получения токенов доступа с использованием этого метода

Мой код хорошо работает, если я не выдал себя за пользователя authorization.sub = '[email protected]', и если я это сделаю, я получаю ошибку 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 = '[email protected]' 

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." 
}): 
+0

authorization.sub не поддерживается для доступа к API Google Analytics, поскольку Google Analytics не является приложением GSuite (приложения для работы). – Matt

+0

Такая же проблема здесь: http://stackoverflow.com/questions/41903578/google-api-service-account-authorization-error – MarcGuay

ответ

2

Помните, что учетная запись службы является фиктивной пользователь. Чтобы учетная запись службы имела доступ к вашей учетной записи Google Analytics, она должна быть предварительно авторизована. Вы авторизуете учетную запись службы так же, как и любой другой пользователь. Вам нужно будет добавить учетную запись службы в качестве пользователя с помощью веб-сайта Google Analytics, для этого вам необходимо сделать это на уровне ACCOUNT, это должен быть уровень ACCOUNT.

Я не уверен, что понимаю, что вы делаете, пока идет олицетворение. Я не рубиновый dev, но ваш код не похож на образец, который я нашел here.

+0

Проблема в том, что я не могу разрешать чтение разрешения для представления Google Analytics для пользователя учетной записи службы. Я не администратор ... Мой вопрос в том, почему он появляется только иногда и как я могу решить эту ошибку? Может быть, какая-то конфигурация в Google Developers Console? Спасибо! –

+0

Учетные записи служб должны быть предварительно авторизованы через веб-сайт Google Analytics, для чего нет работы. Если вы не являетесь владельцем учетной записи, почему вы используете учетную запись службы, вы должны использовать Oauth2 и запрашивать доступ у владельца. – DaImTo

+0

это может помочь https://developers.google.com/api-client-library/ruby/guide/aaa_oauth сохранить токен обновления, чтобы иметь возможность получать доступ к данным пользователей в любое время. – DaImTo

Смежные вопросы