OAuthException: Неверный ответ от Google

голоса
17

Так я бегу мое приложение Flask из облака оболочки Google. В этом приложении пользователь должен войти в систему с помощью аккаунта Google. Я установил все необходимые библиотеки, используя облачную оболочку.

Когда я запустить приложение в облаке оболочки, после выбора учетной записи Google, я хочу, чтобы войти в мое приложение с, эта ошибка возникает

flask_oauth.OAuthException
OAuthException: Invalid response from google

Все отлично работает, если я запустить его с локального хоста.

Любой вид помощи высоко ценится.

PS: Это код

Flask.py:

import logging
from flask import Flask, render_template, redirect, url_for, session, make_response
from flask_oauth import OAuth
from urllib2 import Request, urlopen, URLError
import MySQLdb
import os
import json

Client_Id = my client id
Client_Secret = my client secret
Redirect_URI = '/callback'

SECRET_KEY = 'funny cat'
DEBUG = True

app = Flask(__name__)
app.debug = DEBUG
app.secret_key = SECRET_KEY
oauth = OAuth()

google = oauth.remote_app('google', base_url='https://www.google.com/accounts/', authorize_url='https://accounts.google.com/o/oauth2/auth', request_token_url=None, request_token_params={'scope': 'https://www.googleapis.com/auth/userinfo.profile', 'response_type': 'code'}, access_token_url='https://accounts.google.com/o/oauth2/token', access_token_method='POST', access_token_params={'grant_type': 'authorization_code'}, consumer_key=Client_Id, consumer_secret=Client_Secret)

@app.route('/')
def index():
    return render_template(webpage1.html)                  

@app.route('/login',methods=['post','get'])
def login():
    access_token = session.get('access_token')
    if access_token is None:
        return redirect(url_for('direct'))

    access_token = access_token[0]
    headers = {'Authorization': 'OAuth '+access_token}
    req = Request('https://www.googleapis.com/oauth2/v1/userinfo',
                  None, headers)
    try:
        res = urlopen(req)
    except URLError, e:
        if e.code == 401:
            session.pop('access_token', None)
            return redirect(url_for('direct'))
        return res.read()
    data = json.load(res)
    return render_template(webpage2.html, data = data)

@app.route('/direct')
def direct():
    callback=url_for('authorized', _external=True)
    return google.authorize(callback=callback)

@app.route(Redirect_URI)
@google.authorized_handler
def authorized(resp):
    access_token = resp['access_token']
    session['access_token'] = access_token, ''
    return redirect(url_for('login'))

@app.route('/logout')
def logout():
    session.pop('access_token', None)
    return redirect(url_for('index'))

@google.tokengetter
def get_access_token():
    return session.get('access_token')

if __name__ == __main__:
    app.run(host='0.0.0.0', debug=True)

Мои полномочия в API являются

Authorized JavaScript origins : https://5000-dot-4778310-dot-devshell.appspot.com   
Authorized redirect URIs : https://5000-dot-4778310-dot-devshell.appspot.com/callback   

Почему название проекта отличается по тому же идентификатору клиента и секрет клиента?

Задан 17/11/2018 в 18:55
пользователем
На других языках...                            


1 ответов

голоса
0

Этот вопрос действительно, как настроить Google OAuth 2.0, используя Flask / Python работает внутри Google Cloud Shell VM.

Google OAuth авторизации 2,0 можно включивший в двух режимах: в режиме локального и режим обратного вызова.

режим Localhost

Это требует, чтобы весь процесс аутентификации выполняется в пределах одной и той же машине с локально работает веб-сервер. Веб-браузер, который подключается к Google домен также должен быть запущен внутри одной и той же машине. Браузер не может быть запущена на другом компьютере (или VM). Поскольку облако Shell не имеет веб-браузер, этот режим не представляется возможным.

Ответный режим

Это требует, чтобы веб-сервер работает с TLS настроенным. Google OAuth 2.0 поддерживает только обратный вызов URL к HTTPS конечной точке. Это также требует проверить имя домена и сертификат SSL. Так как вы ни контролировать доменное имя Cloud Shell, ни закрытый ключ для сертификата, настройка TLS не представляется возможным.

Таким образом, ответ на этот вопрос в том, что это не возможно настроить процесс сервер, работающий в облаке Shell для аутентификации Google OAuth 2.0.

В случае этого пользователя, обратный вызов URL не соответствует, как был настроен его Колба веб-сервер. В этой ситуации, правильно настройки URL обратного вызова не представляется возможным.

Ответил 18/11/2018 в 06:54
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more