Я использую oauth 2.0 с гибридным потоком для входа в google https://developers.google.com/identity/sign-in/web/server-side-flow в своем приложении для Android. Я получаю одноразовый код авторизации в приложение для Android и отправляю его в свою флягу api через postman. Когда я применяю flow.step2_exchange к этому однократному коду auth в api, он дает мне ошибка обмена потоком. Я проверил код аутентификации, который поступает в api, так же, как и в моем приложении. Я не могу найти причину ошибки.401 Несанкционированная ошибка. Не удалось обновить код авторизации до объекта учетных данных
Мой один раз код аутентификации выглядит следующим образом: 4/qXilPdy7xOVe5swCBlVRrxjuVu8zEzfcmidlooo7_ls
фрагмент кода моей колба апи:
# IMPORTS FOR THIS STEP
from oauth2client.client import flow_from_clientsecrets
from oauth2client.client import FlowExchangeError
import httplib2
import json
from flask import make_response
import requests
app = Flask(__name__)
CLIENT_ID = json.loads(
open('client_secrets.json', 'r').read())['web']['client_id']
APPLICATION_NAME = "OAUTH_SERVER"
SCOPES = [
'https://www.googleapis.com/auth/gmail.readonly',
'https://www.googleapis.com/auth/userinfo.email',
'https://www.googleapis.com/auth/userinfo.profile',
# Add other requested scopes.
]
# Connect to Database and create database session
engine = create_engine('sqlite:///restaurantmenu.db')
Base.metadata.bind = engine
DBSession = sessionmaker(bind=engine)
session = DBSession()
@app.route('/gconnect', methods=['POST'])
def gconnect():
request.get_data()
code = request.data.decode('utf-8')
print (code)
# Upgrade the authorization code into a credentials object
oauth_flow = flow_from_clientsecrets('client_secrets.json', scope = SCOPES)
oauth_flow.redirect_uri = 'postmessage'
try:
credentials = oauth_flow.step2_exchange(code)
if credentials is None:
print ("it is empty")
except FlowExchangeError:
response = make_response(
json.dumps('Failed to upgrade the authorization code.'), 401)
response.headers['Content-Type'] = 'application/json'
return response
Мой client_secret.json для Апи называется OAUTH_SERVER и следующим образом:
{"web":
{"client_id":"matches the one in console.apps.googleusercontent.com",
"project_id":"oauthapi",
"auth_uri":"https://accounts.google.com/o/oauth2/auth",
"token_uri":"https://accounts.google.com/o/oauth2/token",
"auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs",
"client_secret":"###########",
"redirect_uris["http://localhost:5000/gconnect","http://localhost:5000/"],
"javascript_origins":["http://localhost:5000"]}
}
Он по-прежнему дает ту же ошибку. Я взял первые две строки из «try», чтобы найти строку кода, дающую ошибку. – Sid