1

Ich habe ein benutzerdefiniertes Dashboard im Ruby on Rails-Projekt mit Daten aus Google Analytics. Ich benutze Google Analytics Reporting V4 API und ein Dienstkonto zur Authentifizierung.Client ist nicht berechtigt, Zugriffstoken mit dieser Methode abzurufen

Mein Code funktioniert gut, wenn ich nicht Benutzer authorization.sub = '[email protected]' imitieren und wenn ich es tue, bekomme ich unauthorized_client Fehler, aber nicht alle Male. Manchmal funktioniert es und manchmal nicht.

Dies ist mein Code:

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-Server Log-Ausgabe:

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

Für den Google Analytics-API-Zugriff wird authorization.sub nicht unterstützt, da es sich bei Analytics nicht um eine GSuite-Anwendung (Apps for work) handelt. – Matt

+0

Das gleiche Problem hier: http://stackoverflow.com/questions/41903578/google-api-service-account-authorization-error – MarcGuay

Antwort

2

Denken Sie daran, dass ein Dienstkonto ein Dummy-Benutzer ist. Damit ein Dienstkonto auf Ihr Google Analytics-Konto zugreifen kann, muss es vorab autorisiert werden. Sie autorisieren das Dienstkonto genau wie andere Benutzer. Sie müssen das Dienstkonto als Nutzer über die Google Analytics-Website hinzufügen. Dazu müssen Sie dies auf der ACCOUNT-Ebene tun, die ACCOUNT-Ebene sein muss.

Ich bin nicht sicher, ob ich verstehe, was Sie tun, so weit wie Identitätswechsel geht. Ich bin kein Ruby-Entwickler, aber Ihr Code sieht nicht so aus wie das Beispiel, das ich gefunden habe here.

+0

Das Problem ist, dass ich keine Leseberechtigungen für Google Analytics-Ansicht für Benutzer des Dienstkontos geben kann. Ich bin nicht der Administrator ... Meine Frage ist warum es nur manchmal erscheint und wie kann ich den Fehler beheben? Vielleicht eine Konfiguration in der Google Developers Console? Vielen Dank! –

+0

Dienstkonten müssen über die Google Analytics-Website vorautorisiert werden, dafür gibt es keine Arbeit. Wenn Sie nicht der Besitzer des Kontos sind, warum verwenden Sie ein Dienstkonto, sollten Sie Oauth2 verwenden und den Zugriff des Besitzers anfordern. – DaImTo

+0

dies kann helfen https://developers.google.com/api-client-library/ruby/guide/aaa_oauth Speichern Sie das Aktualisierungstoken, um jederzeit auf die Benutzerdaten zugreifen zu können. – DaImTo

Verwandte Themen