2015-10-04 9 views
10

クライアント側のさまざまなビューのダッシュボードを埋め込むためにサーバー側で使用するいくつかのビューを持つグローバルアカウントがあります。私が理解するところでは、サーバー側のサービスアカウントを使用してアクセストークンを取得し、必要に応じてクライアント側にアクセストークンを送信することができます。私はこの流れが正しいのだろうかと疑問に思っていたのですか?セッションごとにアクセストークンを使用する必要がありますか?クライアントがGoogleアナリティクスで使用するサーバー認証アクセストークンを取得する適切な方法

クライアント側の認証hereには、サーバー認証アクセストークンのフィールドがありますが、必要な正確なフローに関するドキュメントが見つかりませんでした。基本的には、サーバー認証アクセストークンを生成する正しい方法は何か分かりません。どんな助け/ポインタも非常に高く評価されるでしょう。

+0

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

答えて

3

Hereは、サーバー側の認証を設定する方法の一例です。上記のコードは、誰かがサイトにアクセスしたときに新しいトークンを作成します。そのアクセストークンを取得するエンドポイントが表示されますhere。以下は

は作業バージョンを取得するための一般的な手順は次のとおりです。

ステップ1:キーJSONをサービスアカウントを作成し、ダウンロードし

ステップ2:ユーザーとしてサービスアカウントを追加します。 Googleアナリティクスで

ステップ3:アクセストークンを要求するようにJSONのキーデータを使用し

戻るクライアント側に0
# 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 

ステップ4:埋め込み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> 

ステップ5:ダッシュボード・コンポーネントをホストするHTMLコンテナを追加します。

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

ステップ6:ダッシュボードのコードを記述します。

手順3で取得したアクセストークンを使用して、Embed APIを承認します。

gapi.analytics.ready(関数(){

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

トークンを返すエンドポイントを作成する追加の作業が終了実装あなたにバック依存するが、どのようにデモのソースコードそれはhereです。

1

私はGoogleアナリティクスに詳しくは分かりませんが、OAuthのところでは、アクセストークンとリフレッシュトークンの処理はすべてサーバー側にある必要があります。クライアントは認証コードを受信し、それをサーバーに提供し、サーバーはトークンを取得し、トークンを使用して必要なデータを取得します。アクセストークンをクライアントに送信する必要はありません。

標準のOAuthの流れを説明しており、これを読むために役に立つかもしれません: https://developers.google.com/identity/protocols/OAuth2

+1

これは質問に対する回答ではありません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 – jruizaranguren

+0

私の回答がCenocの質問に答えることができない場合、私はCenocが何を求めているのか理解していません。 Cenocが求めていることは、アクセストークンを取得してクライアントに送信するかどうかが正しいOAuthフローであるかどうか、アクセストークンがセッション単位であるかどうかということです。私の回答では、Cenocの流れが正しくなく、アクセストークンとリフレッシュトークンがすべてサーバー側にある必要があり、2番目の質問は無関係であることを説明します。私が答えた質問が、作者が尋ねようとしていた質問ではない場合は、おそらくもっと明確にする必要があります。 – RevolutionTech

関連する問題