OAuthException: Ugyldig svar fra google

stemmer
17

Så jeg kjører min Flask program fra Google Cloud skallet. I dette programmet brukeren må logge inn med sin Google-konto. I installert alle nødvendige bibliotek ved hjelp av sky skallet.

Når jeg kjører programmet i skyen skallet, etter å ha valgt google konto jeg vil logge inn i min app med, kommer denne feilen opp

flask_oauth.OAuthException
OAuthException: Invalid response from google

Alt fungerer fint hvis jeg kjører den fra lokale verten.

Enhver form for hjelp er høyt verdsatt.

PS: Dette er koden

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)

Mine legitimasjon i API er

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

Hvorfor er prosjektnavnet forskjellig for samme klient id og klient hemmelighet?

Publisert på 17/11/2018 klokken 18:55
bruker
På andre språk...                            


1 svar

stemmer
0

Dette spørsmålet er egentlig hvordan du setter opp Google OAuth 2.0 ved hjelp av Flask / Python kjører inne i en Google Cloud Shell VM.

Google OAuth 2.0 Fullmakten kan peformed i to moduser: localhost modus og modus for tilbakeringing.

Localhost modus

Dette krever at hele autentiseringsprosessen utføres innen den samme maskin med et lokalt løpende webserver. Nettleseren som kobles til Google Domain må også kjøre inn i samme maskin. Nettleseren kan ikke kjøre på en annen maskin (eller VM). Siden Cloud Shell ikke har en nettleser, er denne modusen ikke mulig.

modus for tilbakeringing

Dette krever at webserveren kjører med TLS konfigurert. Google OAuth 2.0 støtter kun en tilbakeringing url til en HTTPS endepunkt. Dette krever også en bekreftet domenenavn og et SSL-sertifikat. Siden du verken styre domenenavn Cloud Shell, og heller ikke har den private nøkkelen for sertifikatet, sette opp TLS er ikke mulig.

Derfor er svaret på dette spørsmålet er at det ikke er mulig å sette opp en server prosess som kjører i Cloud Shell å håndtere Google OAuth 2.0-godkjenning.

I denne brukerens tilfelle, gjorde tilbakeringingswebadresse ikke matche hvordan hans Flask webserveren ble konfigurert. I denne situasjonen riktig konfigurering av tilbakeringingswebadresse er ikke mulig.

Svarte 18/11/2018 kl. 06:54
kilden bruker

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