OAuthException: Błędna odpowiedź od Google

głosy
17

Więc używam mojej aplikacji kolbę z cloud skorupy google. W tej aplikacji użytkownik musi się zalogować na swoje konto Google. Po zainstalowaniu wszystkich wymaganych bibliotek przy użyciu chmury powłokę.

Kiedy uruchomić aplikację w chmurze powłoki, po wybraniu konta google Chcę zalogować się do mojego app z tym pojawia się błąd

flask_oauth.OAuthException
OAuthException: Invalid response from google

Wszystko działa poprawnie, gdy uruchomię go z lokalnego hosta.

Wszelkiego rodzaju pomoc jest bardzo ceniona.

PS: Jest to kod

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)

Moje poświadczenia w API są

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

Dlaczego to nazwa projektu różni się dla tego samego identyfikatora klienta i klienta tajemnicy?

Utwórz 17/11/2018 o 18:55
użytkownik
W innych językach...                            


1 odpowiedzi

głosy
0

To pytanie jest naprawdę, jak skonfigurować Google OAuth 2.0 wykorzystaniem Flask / Python działa wewnątrz Google Cloud Shell VM.

Google autoryzacji OAuth 2.0 można peformed w dwóch trybach: localhost i tryb oddzwaniania.

tryb localhost

Wymaga to, że cały proces uwierzytelniania być przeprowadzone w tym samym komputerze z systemem lokalnie serwer WWW. Przeglądarka internetowa, która łączy się z Google domeny musi być uruchomiony wewnątrz tej samej maszynie. Przeglądarka nie może być uruchomiony na innym komputerze (lub VM). Ponieważ Chmura Shell nie posiada przeglądarkę internetową, tryb ten nie jest możliwe.

tryb oddzwaniania

Wymaga to, że serwer jest uruchomiony z TLS skonfigurowane. Google OAuth 2.0 obsługuje tylko url oddzwonienia do punktu końcowego HTTPS. Wymaga to również zweryfikowany nazwę domeny i certyfikat SSL. Ponieważ ani kontrolować nazwy domeny Chmura Shell, ani mieć klucz prywatny certyfikatu, utworzenie TLS nie jest możliwe.

W związku z tym, że odpowiedź na to pytanie jest to, że nie jest możliwe, aby skonfigurować serwer uruchomiony proces w chmurze Shell obsługiwać uwierzytelnianie Google OAuth 2.0.

W przypadku użytkownika, adres URL wywołania zwrotnego nie pasuje jak jego serwer WWW Kolba została skonfigurowana. W tej sytuacji prawidłowo konfigurowania URL wywołania zwrotnego nie jest możliwa.

Odpowiedział 18/11/2018 o 06:54
źródło użytkownik

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