2016-10-18 19 views
-1

私のアプリケーションには、クライアント側でReactとReduxが実行され、サーバー側でFlaskが実行されています。OAuth Googleログインを完了するにはどうすればよいですか?

私はの形で私のクライアント上でGoogleのOAuthのトーク​​ンを受け取った:私は私のフラスコサーバがと認識している

axios.post(`${local_env_url}/gconnect`, {returnData}) 
を経由して自分のサーバーにこの全体のトークンオブジェクトを送っ

Object { El: "109087143026456349612", Zi: Object, w3: Object, googleId: 
"109087143026456349612", tokenObj: Object, tokenId: 
"eyJhbGciOiJSUzI1NiIsImtpZCI6IjUxNjE…", accessToken: "ya29.Ci- 
AAyPxYI7qVyKp2QTwadhiVtc9Qg…", profileObj: Object } 

@app.route('/gconnect', methods=['POST']) 
def gconnect(): 
token = request.data 

ここからはどこに行くのですか?それは私がこのリンクにそれを送信することにより、トークンを検証できることを述べているドキュメント上 : 「https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=%s」%(のTokenId)

が、私は全体のトークンオブジェクトまたは単にアクセストークン値を送信してるかどうかは明確ではありません。

答えて

0

手順は、この

  1. のようなもので、ユーザーが正常にアプリに接続した後、Googleの認証データを取得します。
  2. ユーザーがログインに成功したら、HTTPSを使用してユーザーのIDトークンをサーバーに送信します。
  3. 次に、サーバー上でIDトークンの整合性を確認し、IDトークンのサブクレームからユーザーのIDを取得します。

サーバー側では、id_tokenとそれ以外は送信する必要がありません。

あなたのケースではフラスコである黒塗りのサーバーに渡されたIDトークンの完全性が確認されます。

あなたは、このエンドポイントにIDトークンを検証するためのHTTPリクエストを作成する必要があり、サーバー側からの

- トークンが適切に署名し、有効である場合は

https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=XYZ123 

、あなたは、HTTP 200応答を取得します本文にJSON形式のIDトークン要求が含まれています。

サーバー側で受信した応答からすべてのユーザー情報を取得できます。

は、HTTPリクエストを行うために任意のPythonライブラリを使用することができますid_token検証するためにリクエストを送信するには、またはあなたは、Python用のGoogleクライアントライブラリを使用することができます -

from oauth2client import client, crypt 

# (Receive token by HTTPS POST) 

try: 
    idinfo = client.verify_id_token(token, CLIENT_ID) 
    # If multiple clients access the backend server: 
    if idinfo['aud'] not in [ANDROID_CLIENT_ID, IOS_CLIENT_ID, WEB_CLIENT_ID]: 
     raise crypt.AppIdentityError("Unrecognized client.") 
    if idinfo['iss'] not in ['accounts.google.com', 'https://accounts.google.com']: 
     raise crypt.AppIdentityError("Wrong issuer.") 
    if idinfo['hd'] != APPS_DOMAIN_NAME: 
     raise crypt.AppIdentityError("Wrong hosted domain.") 
except crypt.AppIdentityError: 
    # Invalid token 
userid = idinfo['sub'] 

詳細情報here - Googleのクライアントライブラリを使用する方法に関する。

+0

ありがとう、私はこの部分を昨夜考え出しました。最後に、トークンを検証するときに、クライアントに返信してlocalStorageに保存し、サーバーへの呼び出しごとにチェックしますか? – driftdrift

+0

保管しないでください。 'gapi'を使ってトークンを取得することができます。 – WitVault

関連する問題