OAuthException: Μη έγκυρη απόκριση από το Google

ψήφοι
17

Είμαι, λοιπόν, εφαρμογή που εκτελείται Φιάλη μου από το σύννεφο κέλυφος google. Σε αυτή την εφαρμογή, ο χρήστης πρέπει να συνδεθεί με το λογαριασμό τους Google. Έχω εγκαταστήσει όλες τις απαιτούμενες βιβλιοθήκες χρησιμοποιώντας το κέλυφος σύννεφο.

Όταν τρέχω την εφαρμογή στο κέλυφος σύννεφο, μετά την επιλογή του λογαριασμού google θέλω να συνδεθείτε στο app μου με αυτό το σφάλμα εμφανίζεται

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 χρησιμοποιώντας φιάλη / Python τρέχει μέσα σε ένα Google Cloud Shell VM.

Google OAuth 2.0 άδειας μπορεί να peformed με δύο τρόπους: Λειτουργία localhost και λειτουργία επανάκλησης.

λειτουργία localhost

Αυτό προϋποθέτει ότι η όλη διαδικασία πιστοποίησης θα πραγματοποιείται εντός της ίδιας μηχανής με τοπικά τρέχει web server. Το πρόγραμμα περιήγησης που συνδέεται με το Google τομέα πρέπει να τρέχει μέσα στο ίδιο μηχάνημα. Το πρόγραμμα περιήγησης δεν μπορεί να τρέχει σε ένα άλλο μηχάνημα (ή VM). Από Cloud Shell δεν έχει έναν web browser, αυτή η λειτουργία δεν είναι δυνατή.

επανάκλησης λειτουργία

Αυτό προϋποθέτει ότι ο web server τρέχει με TLS ρυθμιστεί. Google OAuth 2.0 υποστηρίζει μόνο ένα επανάκλησης url σε ένα τελικό σημείο HTTPS. Αυτό απαιτεί επίσης μια επαληθεύονται domain name και ένα πιστοποιητικό SSL. Από τη στιγμή που δεν ελέγχει το όνομα τομέα Cloud Shell, ούτε έχει το ιδιωτικό κλειδί για το πιστοποιητικό, για τη δημιουργία TLS δεν είναι δυνατή.

Ως εκ τούτου, η απάντηση στο ερώτημα αυτό είναι ότι δεν είναι δυνατόν να στήσετε μια διεργασία διακομιστή που εκτελείται στο Cloud Shell να χειριστεί ταυτότητας Google OAuth 2.0.

Στην περίπτωση του χρήστη, η διεύθυνση URL επανάκλησης δεν ταιριάζει με τον τρόπο φιάλη web server του είχε ρυθμιστεί. Σε αυτήν την περίπτωση, σωστά τη διαμόρφωση του 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