2015-10-04 24 views
10

Ho un account globale che ha diverse visualizzazioni che voglio utilizzare sul lato server per incorporare i dashboard per le varie viste sul lato client. Da quello che ho capito, ottengo un token di accesso usando un account di servizio sul lato server e posso quindi inviare il token di accesso al lato client ogni volta che è necessario. Mi stavo chiedendo, è questo il flusso corretto? Il token di accesso dovrebbe essere per sessione?Metodo corretto per ottenere un token di accesso all'autenticazione server per un client da utilizzare con google analytics

L'autorizzazione sul lato client mostrata here ha un campo per un token di accesso di autenticazione del server, ma non è stato possibile trovare la documentazione sul flusso esatto che volevo. Fondamentalmente non sono sicuro di quale sia il modo corretto per generare quel token di accesso all'autent server. Qualsiasi aiuto/suggerimento sarebbe molto apprezzato.

+0

https://ga-dev-tools.appspot.com/embed-api/server-side-authorization/ – Matt

risposta

3

Here è un esempio di come impostare autenticazione lato server. Il codice precedente crea un nuovo token quando qualcuno visita il sito. È possibile visualizzare l'endpoint che ottiene quel token di accesso here.

Qui di seguito sono i punti generali per arrivare a una versione funzionante:

Fase 1: Creare un account di servizio e scaricare il JSON chiave

Fase 2: Aggiungere l'account di servizio come utente in Google Analytics

Fase 3: utilizzare i dati chiave JSON per richiedere un token di accesso

# service-account.py 

import json 
from oauth2client.client import SignedJwtAssertionCredentials 

# The scope for the OAuth2 request. 
SCOPE = 'https://www.googleapis.com/auth/analytics.readonly' 

# The location of the key file with the key data. 
KEY_FILEPATH = 'path/to/json-key.json' 

# Load the key file's private data. 
with open(KEY_FILEPATH) as key_file: 
    _key_data = json.load(key_file) 

# Construct a credentials objects from the key data and OAuth2 scope. 
_credentials = SignedJwtAssertionCredentials(
    _key_data['client_email'], _key_data['private_key'], SCOPE) 

# Defines a method to get an access token from the credentials object. 
# The access token is automatically refreshed if it has expired. 
def get_access_token(): 
    return _credentials.get_access_token().access_token 

Torna lato client:

Fase 4: Caricare la libreria Embed API.

<script> 
(function(w,d,s,g,js,fs){ 
    g=w.gapi||(w.gapi={});g.analytics={q:[],ready:function(f){this.q.push(f);}}; 
    js=d.createElement(s);fs=d.getElementsByTagName(s)[0]; 
    js.src='https://apis.google.com/js/platform.js'; 
    fs.parentNode.insertBefore(js,fs);js.onload=function(){g.load('analytics');}; 
}(window,document,'script')); 
</script> 

Fase 5: Aggiungere contenitori HTML per ospitare i componenti del cruscotto.

<div id="chart-1-container"></div> 
<div id="chart-2-container"></div> 

Passo 6: Scrivere il codice cruscotto.

Utilizzare il token di accesso ottenuto nel passaggio 3 per autorizzare l'API di incorporamento.

gapi.analytics.ready (function() {

/** 
    * Authorize the user with an access token obtained server side. 
    */ 
    gapi.analytics.auth.authorize({ 
    'serverAuth': { 
     'access_token': '{{ ACCESS_TOKEN_FROM_SERVICE_ACCOUNT }}' 
    } 
    }); 
    ... 

il lavoro aggiuntivo di creare un endpoint che restituisce il token dipende da voi indietro realizzazione finale, ma il codice sorgente di come la demo lo si può trovare here.

1

Non ho molta familiarità con Google Analytics, ma per quanto riguarda OAuth, la gestione dei token di accesso e dei token di aggiornamento dovrebbe essere tutti sul lato server. Il client riceve un codice di autorizzazione e lo fornisce al server, che quindi ottiene i token e utilizza i token per ottenere i dati necessari. Non dovrebbe esserci alcuna necessità di inviare un token di accesso al client.

Potrebbe essere utile leggere questo, che descrive il flusso standard di OAuth: https://developers.google.com/identity/protocols/OAuth2

+1

Ciò non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post. – jruizaranguren

+0

Se la mia risposta non risponde alla domanda di Cenoc, allora non capisco cosa sta chiedendo Cenoc. La mia interpretazione di ciò che Cenoc sta chiedendo è se ottenere o meno un token di accesso e inviarlo al client sia il flusso OAuth corretto, e anche se i token di accesso sono su una base per sessione. Spiego nella mia risposta che il flusso di Cenoc è errato e piuttosto che i token di accesso e i token di aggiornamento dovrebbero essere tutti sul lato server, il che rende la seconda domanda irrilevante. Se la domanda a cui ho risposto non è la domanda che l'autore intende porre, allora forse sono necessari ulteriori chiarimenti. – RevolutionTech