OAuthException: Ongeldig antwoord van Google

stemmen
17

Dus ik stel mijn Fles applicatie uit de Google Cloud shell. In deze app moet de gebruiker inloggen met hun Google-account. Ik installeerde alle vereiste bibliotheken met behulp van de cloud shell.

Toen ik de app in de cloud shell uitvoert, na het kiezen van de Google-account ik wil inloggen in mijn app met, deze fout komt omhoog

flask_oauth.OAuthException
OAuthException: Invalid response from google

Alles werkt prima als ik het in werking van de lokale gastheer.

Elke vorm van hulp wordt zeer gewaardeerd.

PS: Dit is de code

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)

Mijn referenties in de API zijn

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

Waarom is de naam van het project verschillend voor dezelfde klant id en client geheim?

De vraag is gesteld op 17/11/2018 om 18:55
user
In andere talen...                            


1 antwoorden

stemmen
0

Deze vraag is eigenlijk hoe te opstelling Google OAuth 2.0 met behulp van Fles / Python runnen in een Google Cloud Shell VM.

Google OAuth 2.0 toelating kan worden peformed in twee modi: localhost modus en callback functie.

localhost mode

Dit vereist dat het gehele verificatieproces worden uitgevoerd binnen dezelfde machine met een lokaal uitgevoerde webserver. De webbrowser die verbinding maakt met Google Domein moet ook worden uitgevoerd in dezelfde machine. De browser kan niet worden uitgevoerd op een andere machine (of VM). Sinds Cloud Shell een web browser heeft, deze modus is niet mogelijk.

noodoproepmodus

Dit vereist dat de webserver wordt uitgevoerd met TLS geconfigureerd. Google OAuth 2.0 ondersteunt alleen een callback url naar een HTTPS-eindpunt. Dit vereist ook een geverifieerde domeinnaam en een SSL-certificaat. Omdat je geen controle over de domeinnaam Cloud Shell, noch de private sleutel voor het certificaat, het opzetten van TLS is niet mogelijk.

Daarom is het antwoord op deze vraag is dat het niet mogelijk is om het inrichten van een server actief proces in Cloud Shell te hanteren Google OAuth 2.0-authenticatie.

In het geval van deze gebruiker, heeft de callback URL niet overeen met hoe zijn Kolf web server is geconfigureerd. In deze situatie, juist configureren van de verificatie-URL is niet mogelijk.

antwoordde op 18/11/2018 om 06:54
bron van user

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