2016-06-13 34 views
8

Mam problem z uwierzytelnieniem się pod numerem Google Analytics Reporting API v4 przy użyciu Node.js client library. Próbowałem wszystkich metod, zaczynając od JWT (Tokeny serwisowe: JSON & P12), API Keys i OAuth 2.0, ale nigdy nie udało mi się z powodzeniem zostać uwierzytelnionym.Jak uwierzytelnić się w interfejsie API raportowania Google Analytics v4

Uaktywniłem interfejs API w mojej konsoli programisty, utworzyłem identyfikatory i nadałem uprawnienia do moich właściwości i widoku Google Analytics. Udało mi się uzyskać autoryzację i token dostępu dla mojego konta usługi, ale nie wiem, jak użyć go do uwierzytelnienia w Analytics Reporting API v4.

Utknąłem przed komunikatem o błędzie 401: "Żądanie nie ma prawidłowych poświadczeń uwierzytelniających". Próbowałem używać podszywania się pod JWT, ale konto usługi jest nieautoryzowane.

Korzystanie z biblioteki klienta node.js i uwierzytelnianie JWT:

var google = require('googleapis.js'); 

var viewID = 'XXXXXXXXX'; // Google Analytics view ID 
var key = require('service_account.json'); // Service account 

var jwtClient = new google.auth.JWT(key.client_email, null, key.private_key, ['https://www.googleapis.com/auth/analytics.readonly'], null); 
var oauth2Client = new google.auth.OAuth2(); 

jwtClient.authorize(function(err, result) { 
    if (err) { 
    console.log('Unauthorize'); 
    console.log(err); 
    return; 
    } 

    oauth2Client.setCredentials({ 
    access_token: result.access_token 
    }); 

    //Need to authenticate somewhere near here 
    var analytics = google.analyticsreporting('v4'); 
    //Or here 

    var req = { 
    reportRequests: [ 
     { 
     viewId: viewID, 
     dateRanges: [ 
      { 
      startDate: '2016-05-01', 
      endDate: '2016-06-30', 
      },], 
     metrics: [ 
      { 
      expression: 'ga:users', 
      }, { 
      expression: 'ga:sessions', 
      },], 
     },], 
    }; 

    //Maybe here 
    analytics.reports.batchGet(req, 
    function(err, response) { 
     if (err) { 
     console.log('Fail'); 
     console.log(err); 
     return; 
     } 
     console.log('Success'); 
     console.log(response); 
    } 
); 
}); 

Wcześniejsze wersje biblioteki klienta node.js wydaje się mieć metodę, aby określić klienta, ale zniknął, może przestarzała.

Próbowałem przekazać klienta lub token w wywołaniu API lub w żądaniu, ale żaden z nich nie działa.

google.analyticsreporting({ version: 'v4', auth: oauth2Client }); 
google.analyticsreporting({ version: 'v4', access_token: result.access_token }); 

Może to pytanie noobem, ale nie wiem jak to zrobić, nie widzę nic związanego z Analytics Reporting uwierzytelniania v4 w dokumentacji API lub biblioteki klient google, a większość przykładów znalazłem zastosowań Google Analytics API v3.

Jeśli ktoś udało się pomyślnie uwierzytelnić Raportowanie Analytics API v4, proszę o pomoc:/

Odpowiedz

7

dowiedział się, co mi brakuje:

  • Google API Client Library "Opcje":

    google.options({ auth: oauth2Client }); //this one is not very optional 
    
  • W przeciwieństwie do dokumentacji Google Analytics Reporting API v4, zapytania korzystające z biblioteki klienta muszą zawierać nagłówki określające klienta dla każdego żądania (th anks do CVarisco który zawiadamia, client library documentation nie jest naprawdę dokładne ..):

    var request ={ 
        'headers': {'Content-Type': 'application/json'}, 
        'auth': oauth2Client, 
        'resource': req, 
    }; 
    
+0

Próbuję zrobić to samo w .net, ale wydaje się, że w API v4, nie ma sposobu, aby uzyskać dostęp za pomocą tylko klucz APi, czy jestem źle? http://stackoverflow.com/questions/43685261/analytics-reporting-v4-with-api-key – Giox

+0

Czy można to zrobić za pośrednictwem połączenia URL http? – shzyincu

0

Należy również zauważyć, że zalecany sposób zrobić z uwierzytelniania konta usługi po stronie serwera używa auth.getApplicationDefault.

https://developers.google.com/identity/protocols/application-default-credentials

Zalecamy używanie poświadczeń domyślnych aplikacji w dowolnym z następujących okolicznościach:
... ciach ...
- masz dostęp do API z danych związanych z projektem w chmurze lub w inny sposób w odniesieniu do całej aplikacji, a nie osobistych danych użytkownika. W przypadku połączeń z danymi użytkownika najlepiej jest skorzystać z przepływu autoryzacji, w którym użytkownik końcowy udziela wyraźnej zgody na dostęp (zobacz Korzystanie z protokołu OAuth 2.0 do uzyskiwania dostępu do interfejsów Google API).