2016-10-18 2 views
-1

Мое приложение имеет React и Redux работает на стороне клиента и Flask работает на стороне сервера.Как заполнить свой логин Google OAuth?

я получил маркер OAuth от Google на моем клиенте в виде:

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

Я послал весь этот маркер объекта к серверу через

axios.post(`${local_env_url}/gconnect`, {returnData}) 

Мой Колба сервер распознал с:

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

Куда я иду отсюда? На документах он говорит, что я могу проверить маркер, отправив его по этой ссылке: «https://www.googleapis.com/oauth2/v3/tokeninfo?id_token=%s»% (tokenid)

, но это не ясно, если я посылаю весь маркер объект или только значение маркеров доступа ,

ответ

0

шаги подобны этому

  1. Получить Google AUTH данные после того, как пользователь успешно подключается к приложению.
  2. После того, как пользователь успешно выполнит вход, отправьте токен идентификатора пользователя на ваш сервер с помощью HTTPS.
  3. Затем на сервере проверьте целостность идентификатора и извлеките идентификатор пользователя из подзадачи идентификационного маркера.

На стороне сервера вам просто нужно отправить id_token и ничего больше.

Теперь идет проверка целостности идентификационного маркера, переданного на ваш почерневший сервер, который в вашем случае является флягой.

Со стороны сервере вам нужно сделать запрос HTTP для проверки идентификационного маркера этой конечной точки -

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

Если маркер правильно подписан и действует, вы получите ответ HTTP 200, где body содержит идентификационные данные ID-формата в формате JSON.

Вы можете получить всю информацию о пользователе из ответа, полученного на стороне сервера.

Чтобы отправить запрос на проверку id_token вы можете использовать любую библиотеку питона, чтобы сделать запрос HTTP или вы можете использовать клиентскую библиотеку 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

Смежные вопросы