OAuthException: un răspuns nevalid de la Google

voturi
17

Deci, eu sunt difuzate cererea mea Fiole de nor shell Google. În această aplicație utilizatorul trebuie să vă conectați cu contul Google. Am instalat toate bibliotecile necesare, utilizând shell nor.

Când m-am alerga app în coajă nor, după alegerea contul Google Vreau să vă conectați în aplicația mea cu, această eroare apare

flask_oauth.OAuthException
OAuthException: Invalid response from google

Totul funcționează bine dacă am alerga de la gazda locală.

Orice fel de ajutor este foarte apreciat.

PS: Acesta este codul

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)

Certificarile mele în API sunt

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

De ce este numele proiectului pentru același client id-ul și clientul secretul?

Întrebat 17/11/2018 la 18:55
de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
0

Această întrebare este într-adevăr cum să setați Google OAuth 2.0 folosind Fiole / Python care rulează în interiorul unui Google Cloud Shell VM.

Google OAuth 2.0 autorizație poate fi peformed în două moduri: modul localhost și modul de apelare inversă.

modul localhost

Acest lucru presupune că întregul proces de autentificare să fie efectuată în aceeași mașină cu un server web care rulează la nivel local. Browserul web care se conectează la Google de domeniu trebuie să fie, de asemenea, rulează în interiorul aceeași mașină. Browser-ul nu poate fi difuzate pe o mașină diferită (sau VM). Deoarece Cloud Shell nu are un browser web, acest mod nu este posibil.

modul de apelare inversă

Acest lucru presupune că serverul web rulează cu TLS configurate. Google OAuth 2.0 acceptă numai o adresă URL de apel invers la un punct final HTTPS. Acest lucru necesită, de asemenea, un nume de domeniu verificat și un certificat SSL. Din moment ce nici controla numele de domeniu Cloud Shell, și nici nu au cheia privată pentru certificat, configurarea TLS nu este posibilă.

Prin urmare, răspunsul la această întrebare este că nu este posibil să setați un proces server care rulează în Cloud Shell să se ocupe de Google OAuth 2.0 de autentificare.

În cazul acestui utilizator, adresa URL de apel invers nu se potrivește cu modul în care a fost configurat serverul lui Flask web. În această situație, în mod corect configurarea URL-ul de apel invers nu este posibil.

Publicat 18/11/2018 la 06:54
sursa de către utilizator

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